diff --git a/Assets/2DxFX.meta b/Assets/2DxFX.meta new file mode 100644 index 00000000..af5ffa4a --- /dev/null +++ b/Assets/2DxFX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11e1208705bc83545a853f6e6cde5eb1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Doc.meta b/Assets/2DxFX/Doc.meta new file mode 100644 index 00000000..4b169cde --- /dev/null +++ b/Assets/2DxFX/Doc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6e22624b761a99f41b492c4b11e95387 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Doc/2DxFX.pdf b/Assets/2DxFX/Doc/2DxFX.pdf new file mode 100644 index 00000000..8f147a3d Binary files /dev/null and b/Assets/2DxFX/Doc/2DxFX.pdf differ diff --git a/Assets/2DxFX/Doc/2DxFX.pdf.meta b/Assets/2DxFX/Doc/2DxFX.pdf.meta new file mode 100644 index 00000000..fb0f797f --- /dev/null +++ b/Assets/2DxFX/Doc/2DxFX.pdf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5bc364a0a860a984286415304d9142ec +timeCreated: 1529660389 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor.meta b/Assets/2DxFX/Editor.meta new file mode 100644 index 00000000..5d9b934c --- /dev/null +++ b/Assets/2DxFX/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9e20ed5cceba74b4eb63f2eb1b921edf +folderAsset: yes +timeCreated: 1495175798 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources.meta b/Assets/2DxFX/Editor/Resources.meta new file mode 100644 index 00000000..7765fe28 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 62808cf4e4dbdde4fadadd91cfbcc39c +folderAsset: yes +timeCreated: 1495175804 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-blue.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blue.png new file mode 100644 index 00000000..a4313159 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blue.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-blue.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blue.png.meta new file mode 100644 index 00000000..a0ec4ecf --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blue.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 12c6cc8a2d1d8394596d88b8ee94eabe +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-blur.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blur.png new file mode 100644 index 00000000..d829a09d Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blur.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-blur.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blur.png.meta new file mode 100644 index 00000000..f3b8a902 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-blur.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 8920c0d422ad1d145918f3d202cc9f39 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-brightness.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-brightness.png new file mode 100644 index 00000000..1897685c Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-brightness.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-brightness.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-brightness.png.meta new file mode 100644 index 00000000..e3db29c1 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-brightness.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: eff0bcd1c343c6644999a176f1e22720 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_down.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_down.png new file mode 100644 index 00000000..38c81463 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_down.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_down.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_down.png.meta new file mode 100644 index 00000000..ddcbfa5c --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_down.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 81ab747ab75deb3409186fec932b2751 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_left.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_left.png new file mode 100644 index 00000000..24fe40e0 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_left.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_left.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_left.png.meta new file mode 100644 index 00000000..e9fa949c --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_left.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: d2f334ef12d8d8f4e82999c7f285d240 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_right.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_right.png new file mode 100644 index 00000000..5b4cd312 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_right.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_right.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_right.png.meta new file mode 100644 index 00000000..6702d2f1 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_right.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 1b80668b9b71bc145b280af31b26582b +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_up.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_up.png new file mode 100644 index 00000000..98260d5c Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_up.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_up.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_up.png.meta new file mode 100644 index 00000000..72cc99a9 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-clip_up.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 4d5c3193018fbef4586081e3a40c171e +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-color.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-color.png new file mode 100644 index 00000000..dfcf6f3b Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-color.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-color.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-color.png.meta new file mode 100644 index 00000000..3964deda --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-color.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 830ae935baba6a746b95998d8042bf76 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-contrast.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-contrast.png new file mode 100644 index 00000000..40598a49 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-contrast.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-contrast.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-contrast.png.meta new file mode 100644 index 00000000..d2276a1c --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-contrast.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: d9442d1697e797e4a9666fa43c5c19fc +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-1.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-1.png new file mode 100644 index 00000000..c88f8237 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-1.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-1.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-1.png.meta new file mode 100644 index 00000000..67ca6271 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-1.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 2fe844fba132c5d4e946f3fc41d90874 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-2.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-2.png new file mode 100644 index 00000000..00626378 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-2.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-2.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-2.png.meta new file mode 100644 index 00000000..28f8f622 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-2.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 2f8301802333bc944b813c80a453ccd8 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-3.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-3.png new file mode 100644 index 00000000..abdf5fad Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-3.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-3.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-3.png.meta new file mode 100644 index 00000000..879575c2 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-3.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: a80fe5169cf89c946a734da85563c678 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-4.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-4.png new file mode 100644 index 00000000..8c4cdb0a Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-4.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-4.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-4.png.meta new file mode 100644 index 00000000..7510cde8 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-4.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: f462eecf9e6b46e4a8c35f4b11a0a824 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-5.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-5.png new file mode 100644 index 00000000..8c4cdb0a Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-5.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-5.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-5.png.meta new file mode 100644 index 00000000..d95614de --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-corner-5.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: f24d95035b11ad94a838dabf1dbd4ad5 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-distortion.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-distortion.png new file mode 100644 index 00000000..d5da2316 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-distortion.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-distortion.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-distortion.png.meta new file mode 100644 index 00000000..328417f4 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-distortion.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: b0f4ab9f66017f24e9bfcd771476d6e4 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-edge.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-edge.png new file mode 100644 index 00000000..869ed0d0 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-edge.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-edge.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-edge.png.meta new file mode 100644 index 00000000..55be4c0c --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-edge.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 02464560d27a527479c0b652a5aefb6b +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-fade.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-fade.png new file mode 100644 index 00000000..92a52dfe Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-fade.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-fade.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-fade.png.meta new file mode 100644 index 00000000..bb61ea22 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-fade.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: bc8aba8d04a8c5e47be717e10ea97f3b +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-green.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-green.png new file mode 100644 index 00000000..481ae9e4 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-green.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-green.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-green.png.meta new file mode 100644 index 00000000..f91ef950 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-green.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 5454c97d2ac64564b80667627efaa4b7 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-inout.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-inout.png new file mode 100644 index 00000000..6685c235 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-inout.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-inout.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-inout.png.meta new file mode 100644 index 00000000..7f1145ba --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-inout.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: eaa42637c1cd3ad4891805e33742b7f0 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-pixel.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-pixel.png new file mode 100644 index 00000000..0b0b27ab Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-pixel.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-pixel.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-pixel.png.meta new file mode 100644 index 00000000..83b2d5e6 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-pixel.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 1d059e7468d044c44939eb92eb5e3376 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-red.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-red.png new file mode 100644 index 00000000..81dc804f Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-red.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-red.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-red.png.meta new file mode 100644 index 00000000..7f84f0f6 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-red.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 04017d226fdf7434988a2965d31014c3 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-seed.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-seed.png new file mode 100644 index 00000000..80dc2baf Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-seed.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-seed.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-seed.png.meta new file mode 100644 index 00000000..d012f861 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-seed.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: f6bcc1950c23e0240b5c86d88a37814e +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-size.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size.png new file mode 100644 index 00000000..80f83d29 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-size.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size.png.meta new file mode 100644 index 00000000..dc35b6f7 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 7db47e2a74aa63647b3930a8bb0fd635 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_x.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_x.png new file mode 100644 index 00000000..6c71e25d Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_x.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_x.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_x.png.meta new file mode 100644 index 00000000..b1b7fafe --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_x.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: bc75f2531c69a074fb7bf03f614cc984 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_y.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_y.png new file mode 100644 index 00000000..786b91e8 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_y.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_y.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_y.png.meta new file mode 100644 index 00000000..04b6d462 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-size_y.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 5b01ccc5f9dd7ec44af7eee5eb5b3338 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-time.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-time.png new file mode 100644 index 00000000..8903ff6b Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-time.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-time.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-time.png.meta new file mode 100644 index 00000000..4c23660f --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-time.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 81d8d1ae9e965654bb87f3ca68539dde +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-value.png b/Assets/2DxFX/Editor/Resources/2dxfx-icon-value.png new file mode 100644 index 00000000..c24f6067 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-icon-value.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-icon-value.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-icon-value.png.meta new file mode 100644 index 00000000..cebca699 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-icon-value.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 5ab6e722b707f9b4cbc513f8d3369869 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g1.png b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g1.png new file mode 100644 index 00000000..400beb96 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g1.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g1.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g1.png.meta new file mode 100644 index 00000000..1152f475 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g1.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 0223eaad5ccc5b84b9ffe43589fd76ff +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g2.png b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g2.png new file mode 100644 index 00000000..0972aee0 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g2.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g2.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g2.png.meta new file mode 100644 index 00000000..6df6791b --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g2.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 48d2aae243173214b92f5113a9a01065 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g3.png b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g3.png new file mode 100644 index 00000000..7d89211f Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g3.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g3.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g3.png.meta new file mode 100644 index 00000000..b29e92f4 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g3.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 98a7072e582f667418fde0de6a431883 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g4.png b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g4.png new file mode 100644 index 00000000..7ffc08b9 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g4.png differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfx-p-4g4.png.meta b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g4.png.meta new file mode 100644 index 00000000..b8199012 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfx-p-4g4.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 3d43437d05c8cfa4cb320e4659d20403 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector-al.jpg b/Assets/2DxFX/Editor/Resources/2dxfxinspector-al.jpg new file mode 100644 index 00000000..2f34a5c4 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfxinspector-al.jpg differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector-al.jpg.meta b/Assets/2DxFX/Editor/Resources/2dxfxinspector-al.jpg.meta new file mode 100644 index 00000000..698c7203 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfxinspector-al.jpg.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: b549899e643c99841997a13120c458dd +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector-anim.jpg b/Assets/2DxFX/Editor/Resources/2dxfxinspector-anim.jpg new file mode 100644 index 00000000..065540f6 Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfxinspector-anim.jpg differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector-anim.jpg.meta b/Assets/2DxFX/Editor/Resources/2dxfxinspector-anim.jpg.meta new file mode 100644 index 00000000..3fa3c1c8 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfxinspector-anim.jpg.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: d088f1ba54892624893e4ecedfb7c355 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector-hdr.jpg b/Assets/2DxFX/Editor/Resources/2dxfxinspector-hdr.jpg new file mode 100644 index 00000000..de08cbdf Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfxinspector-hdr.jpg differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector-hdr.jpg.meta b/Assets/2DxFX/Editor/Resources/2dxfxinspector-hdr.jpg.meta new file mode 100644 index 00000000..31b79e20 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfxinspector-hdr.jpg.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: e3ed9c63699704d4fa666a3d4513241c +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector.jpg b/Assets/2DxFX/Editor/Resources/2dxfxinspector.jpg new file mode 100644 index 00000000..27fc0e5f Binary files /dev/null and b/Assets/2DxFX/Editor/Resources/2dxfxinspector.jpg differ diff --git a/Assets/2DxFX/Editor/Resources/2dxfxinspector.jpg.meta b/Assets/2DxFX/Editor/Resources/2dxfxinspector.jpg.meta new file mode 100644 index 00000000..50d9f360 --- /dev/null +++ b/Assets/2DxFX/Editor/Resources/2dxfxinspector.jpg.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 9880e2a995ad7dd46bdea94fc65aebd7 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders.meta b/Assets/2DxFX/ExtraShaders.meta new file mode 100644 index 00000000..6a8626c8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 03ca120461319c74db94566c60c91d70 +folderAsset: yes +timeCreated: 1542212053 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples.meta b/Assets/2DxFX/ExtraShaders/Examples.meta new file mode 100644 index 00000000..ebb575ca --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ae53877167a0885439aceed17359457c +folderAsset: yes +timeCreated: 1537719483 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat.mat b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat.mat new file mode 100644 index 00000000..ad44ded4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat.mat @@ -0,0 +1,93 @@ +%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: BackgroundRepeat + m_Shader: {fileID: 4800000, guid: f6fefeda4f5dc5c4cac887c9a3e4830c, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Repeat: 720 + - ZoomUV_PosX_1: 0.5 + - ZoomUV_PosY_1: 0.5 + - ZoomUV_Zoom_1: 1 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 0.256 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat.mat.meta b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat.mat.meta new file mode 100644 index 00000000..1d1f33aa --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e9bef2352d700c4da606fe783771af2 +timeCreated: 1537720225 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat2.mat b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat2.mat new file mode 100644 index 00000000..2e018905 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat2.mat @@ -0,0 +1,93 @@ +%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: BackgroundRepeat2 + m_Shader: {fileID: 4800000, guid: f6fefeda4f5dc5c4cac887c9a3e4830c, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Repeat: 24 + - ZoomUV_PosX_1: 0.5 + - ZoomUV_PosY_1: 0.5 + - ZoomUV_Zoom_1: 1 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 0.078 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat2.mat.meta b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat2.mat.meta new file mode 100644 index 00000000..e702a27c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/BackgroundRepeat2.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3a122af8078ec0145a0f0df8613755fd +timeCreated: 1537720225 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites.meta new file mode 100644 index 00000000..2a1e9eba --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e92453afd7ced664d81b0c9e8124105f +folderAsset: yes +timeCreated: 1537719483 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/2DxFX.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/2DxFX.png new file mode 100644 index 00000000..82a87b38 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/2DxFX.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/2DxFX.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/2DxFX.png.meta new file mode 100644 index 00000000..9de9249e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/2DxFX.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: a1487f21766ccdb449d933960f2ae63f +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/Additive.mat b/Assets/2DxFX/ExtraShaders/Examples/Sprites/Additive.mat new file mode 100644 index 00000000..ba066d7a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/Additive.mat @@ -0,0 +1,81 @@ +%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: Additive + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: + - ETC1_EXTERNAL_ALPHA + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/Additive.mat.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/Additive.mat.meta new file mode 100644 index 00000000..730af616 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/Additive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 81a546afc0414664095f2bce578311d3 +timeCreated: 1537719612 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/background.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/background.png new file mode 100644 index 00000000..d39d91b2 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/background.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/background.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/background.png.meta new file mode 100644 index 00000000..7a0e8773 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/background.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 42ebd58f0ac2d8c43b945da28fa9286d +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/doodle.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/doodle.png new file mode 100644 index 00000000..de656518 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/doodle.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/doodle.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/doodle.png.meta new file mode 100644 index 00000000..fa6d9811 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/doodle.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: cbe6c668ac599684d85a1f8ed1abab27 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/ghost.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/ghost.png new file mode 100644 index 00000000..86d66761 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/ghost.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/ghost.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/ghost.png.meta new file mode 100644 index 00000000..a2282faa --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/ghost.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: a276df27a19356441802da17f6ac0c2e +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/left.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/left.png new file mode 100644 index 00000000..a41091e9 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/left.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/left.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/left.png.meta new file mode 100644 index 00000000..908472b4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/left.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: e3c375e812c8553488b4366f021ab765 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite1.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite1.png new file mode 100644 index 00000000..880d39d6 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite1.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite1.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite1.png.meta new file mode 100644 index 00000000..a03578ab --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite1.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 0977700b009fbd743a5554d09d583a1c +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite2.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite2.png new file mode 100644 index 00000000..43ccc46d Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite2.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite2.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite2.png.meta new file mode 100644 index 00000000..f1961ac9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite2.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: c15a3825223d08f48a238359630d20c8 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite3.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite3.png new file mode 100644 index 00000000..71381800 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite3.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite3.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite3.png.meta new file mode 100644 index 00000000..53f8fa71 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/nsprite3.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 80d2b68946bdd4349847218c44f708d1 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/oldguy.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/oldguy.png new file mode 100644 index 00000000..a211b3d8 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/oldguy.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/oldguy.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/oldguy.png.meta new file mode 100644 index 00000000..2c6a22a3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/oldguy.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 344610008166ee2429e5fb9a360658f6 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 9 + spriteMeshType: 0 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/right.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/right.png new file mode 100644 index 00000000..6a419c22 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/right.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/right.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/right.png.meta new file mode 100644 index 00000000..90e87b65 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/right.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 6bedf7cf431dfe34d94efd1eca0027dc +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/shader_icon.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/shader_icon.png new file mode 100644 index 00000000..922489ae Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/shader_icon.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/shader_icon.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/shader_icon.png.meta new file mode 100644 index 00000000..7a0dd072 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/shader_icon.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: f194f4e71fdd2254b933a3680bdd9265 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/smoke.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/smoke.png new file mode 100644 index 00000000..2df4a285 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/smoke.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/smoke.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/smoke.png.meta new file mode 100644 index 00000000..6ef38c9f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/smoke.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: b6d467e6f6f853a41a4d23037d9e4f61 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite1.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite1.png new file mode 100644 index 00000000..7ad607a5 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite1.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite1.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite1.png.meta new file mode 100644 index 00000000..4fab64b9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite1.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 4e695559497cc924dba211b91b8b26fc +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite2.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite2.png new file mode 100644 index 00000000..f725a179 Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite2.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite2.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite2.png.meta new file mode 100644 index 00000000..d43320c8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/sprite2.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 66fedc6e337744c40826daef35f79483 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/switcharrow.png b/Assets/2DxFX/ExtraShaders/Examples/Sprites/switcharrow.png new file mode 100644 index 00000000..c272474b Binary files /dev/null and b/Assets/2DxFX/ExtraShaders/Examples/Sprites/switcharrow.png differ diff --git a/Assets/2DxFX/ExtraShaders/Examples/Sprites/switcharrow.png.meta b/Assets/2DxFX/ExtraShaders/Examples/Sprites/switcharrow.png.meta new file mode 100644 index 00000000..aa7f7719 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/Sprites/switcharrow.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: fd4989c353344ac4aa8289f6ee733125 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 0 + wrapV: 0 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/_2DC_ArrowSelection.cs b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ArrowSelection.cs new file mode 100644 index 00000000..52b033ac --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ArrowSelection.cs @@ -0,0 +1,68 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class _2DC_ArrowSelection : MonoBehaviour { + + public Camera cam; + + private Vector3 pos; + private float x; + public float posx; + private float timeskip; + private float timemult; + // Use this for initialization + void Start () + { + + } + + // Update is called once per frame + void Update () + { + if (timeskip < 1) timemult = 1; + if (timeskip > 1) timemult = 1.2f; + if (timeskip > 1.1f) timemult = 1.4f; + if (timeskip > 1.2f) timemult = 1.6f; + if (timeskip > 1.3f) timemult = 1.8f; + if (timeskip > 1.4f) timemult = 2f; + if (timeskip > 1.5f) timemult = 2.2f; + if (timeskip > 1.6f) timemult = 2.5f; + if (timeskip > 1.7f) timemult = 2.8f; + if (timeskip > 1.8f) timemult = 3f; + if (timeskip > 1.9f) timemult = 4f; + + if (Input.GetKey(KeyCode.LeftArrow)) + { + pos = cam.transform.position; + pos.x += -0.2f; + cam.transform.position = pos; + } + + if (Input.GetKey(KeyCode.RightArrow)) + { + pos = cam.transform.position; + pos.x += 0.2f; + cam.transform.position = pos; + } + + } + + void OnMouseDrag() + { + pos = cam.transform.position; + pos.x -=posx*timemult; + cam.transform.position = pos; + timeskip+=Time.deltaTime; + + } + + void OnMouseExit() + { + timeskip = 0; + } + void OnMouseUp() + { + timeskip = 0; + } +} diff --git a/Assets/2DxFX/ExtraShaders/Examples/_2DC_ArrowSelection.cs.meta b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ArrowSelection.cs.meta new file mode 100644 index 00000000..3b6c45b2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ArrowSelection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7ca03e49e20f9724e94ac38305cdac08 +timeCreated: 1537947161 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/_2DC_ShaderLerpDemo.cs b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ShaderLerpDemo.cs new file mode 100644 index 00000000..87c7fea1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ShaderLerpDemo.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[ExecuteInEditMode] +public class _2DC_ShaderLerpDemo : MonoBehaviour { + + public Material mat; + public string variable; + public AnimationCurve anm; + public float Mul=1; + public float Speed=1; + // Use this for initialization + void Start () { + + } + + // Update is called once per frame + void Update () + { + if (mat!=null) mat.SetFloat(variable, anm.Evaluate(Time.time * Speed)*Mul); + } +} diff --git a/Assets/2DxFX/ExtraShaders/Examples/_2DC_ShaderLerpDemo.cs.meta b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ShaderLerpDemo.cs.meta new file mode 100644 index 00000000..475362e4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/_2DC_ShaderLerpDemo.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1344074fc1d0a864ea2dbdb8f5403d42 +timeCreated: 1539093247 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: + - mat: {fileID: 2100000, guid: 98c04aa50a773b540aaf124e4b0fddb4, type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/animation.meta b/Assets/2DxFX/ExtraShaders/Examples/animation.meta new file mode 100644 index 00000000..b29db425 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/animation.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c214e9b94f3e5334ebbf7a6a8a077e88 +folderAsset: yes +timeCreated: 1537883580 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/animation/alphaintensity.anim b/Assets/2DxFX/ExtraShaders/Examples/animation/alphaintensity.anim new file mode 100644 index 00000000..c6b68085 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/animation/alphaintensity.anim @@ -0,0 +1,134 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: alphaintensity + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 6 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.3333335 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AlphaIntensity_Fade_1 + path: + classID: 212 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 2334773993 + script: {fileID: 0} + typeID: 212 + customType: 22 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 6.3333335 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 6 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6.3333335 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AlphaIntensity_Fade_1 + path: + classID: 212 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/2DxFX/ExtraShaders/Examples/animation/alphaintensity.anim.meta b/Assets/2DxFX/ExtraShaders/Examples/animation/alphaintensity.anim.meta new file mode 100644 index 00000000..462aaf06 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/animation/alphaintensity.anim.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 91acb4b1e83d7df4c8d1d5dd0db834d6 +timeCreated: 1537884149 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Examples/animation/ghost-alphaintensity.controller b/Assets/2DxFX/ExtraShaders/Examples/animation/ghost-alphaintensity.controller new file mode 100644 index 00000000..b6cff221 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/animation/ghost-alphaintensity.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ghost-alphaintensity + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107199548636933530} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &1102574434435121540 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: alphaintensity + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 91acb4b1e83d7df4c8d1d5dd0db834d6, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107199548636933530 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102574434435121540} + m_Position: {x: 200, y: 0, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102574434435121540} diff --git a/Assets/2DxFX/ExtraShaders/Examples/animation/ghost-alphaintensity.controller.meta b/Assets/2DxFX/ExtraShaders/Examples/animation/ghost-alphaintensity.controller.meta new file mode 100644 index 00000000..30868565 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Examples/animation/ghost-alphaintensity.controller.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1853f85aad90bd549ac3a68829f59082 +timeCreated: 1537884149 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material.meta b/Assets/2DxFX/ExtraShaders/Material.meta new file mode 100644 index 00000000..5c3b39ae --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 80ce0766aa0eaa14a831c121d3598627 +folderAsset: yes +timeCreated: 1537725018 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Additive.mat b/Assets/2DxFX/ExtraShaders/Material/Additive.mat new file mode 100644 index 00000000..785b042a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Additive.mat @@ -0,0 +1,88 @@ +%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: Additive + m_Shader: {fileID: 4800000, guid: 7aada9f885f287a4b86a05061f0dcaba, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Additive.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Additive.mat.meta new file mode 100644 index 00000000..22ec2613 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Additive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 889ccc247ea079e428c488ca8a573dbd +timeCreated: 1537725007 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AlphaIntensity.mat b/Assets/2DxFX/ExtraShaders/Material/AlphaIntensity.mat new file mode 100644 index 00000000..82b5e747 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AlphaIntensity.mat @@ -0,0 +1,89 @@ +%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: AlphaIntensity + m_Shader: {fileID: 4800000, guid: 62b10ab342d7f4e42843245f67441ef2, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaIntensity_Fade_1: 2.67 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AlphaIntensity.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AlphaIntensity.mat.meta new file mode 100644 index 00000000..c014038e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AlphaIntensity.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 58bb2102699c0bc4f872973b87e0b954 +timeCreated: 1537725007 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedBurn.mat b/Assets/2DxFX/ExtraShaders/Material/AnimatedBurn.mat new file mode 100644 index 00000000..b1b99048 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedBurn.mat @@ -0,0 +1,91 @@ +%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: AnimatedBurn + m_Shader: {fileID: 4800000, guid: e5954c7b8917881499950daad7684e70, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AnimatedBurn_Fade: 1 + - _AnimatedBurn_Offset: 0 + - _AnimatedBurn_Speed: 0.465 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedBurn.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AnimatedBurn.mat.meta new file mode 100644 index 00000000..9b460bef --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedBurn.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a7aaa4ebafbc6d4290d77a15a90bcd0 +timeCreated: 1537970350 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedMovement.mat b/Assets/2DxFX/ExtraShaders/Material/AnimatedMovement.mat new file mode 100644 index 00000000..dfccdcf1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedMovement.mat @@ -0,0 +1,92 @@ +%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: AnimatedMovement + m_Shader: {fileID: 4800000, guid: 732ccbd3533016342a54d2b6932547f3, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedMouvementUV_Speed_1: 0.239 + - AnimatedMouvementUV_X_1: 0.268 + - AnimatedMouvementUV_Y_1: 0.554 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedMovement.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AnimatedMovement.mat.meta new file mode 100644 index 00000000..d0c8e6c6 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedMovement.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c41c2182696baa24ab6ada5a845181d8 +timeCreated: 1537872670 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedOffset.mat b/Assets/2DxFX/ExtraShaders/Material/AnimatedOffset.mat new file mode 100644 index 00000000..b1f3c8a1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedOffset.mat @@ -0,0 +1,94 @@ +%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: AnimatedOffset + m_Shader: {fileID: 4800000, guid: d6ba954a9a452a74b819b3bff7b42416, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedOffsetUV_Speed_1: 0.1 + - AnimatedOffsetUV_X_1: 0.211 + - AnimatedOffsetUV_Y_1: 0.211 + - AnimatedOffsetUV_ZoomX_1: 2.205 + - AnimatedOffsetUV_ZoomY_1: 2.591 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedOffset.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AnimatedOffset.mat.meta new file mode 100644 index 00000000..85b81bf4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedOffset.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4fb42b021a872644e8c63fd1fe56d38b +timeCreated: 1537884483 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPong.mat b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPong.mat new file mode 100644 index 00000000..8792b7e7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPong.mat @@ -0,0 +1,94 @@ +%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: AnimatedPingPong + m_Shader: {fileID: 4800000, guid: 2cb23d52eadf31143937de4926889b62, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedPingPongOffsetUV_1_OffsetX_1: 0 + - AnimatedPingPongOffsetUV_1_OffsetY_1: 0.1 + - AnimatedPingPongOffsetUV_1_Speed_1: 0.481 + - AnimatedPingPongOffsetUV_1_ZoomX_1: 1 + - AnimatedPingPongOffsetUV_1_ZoomY_1: 1 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPong.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPong.mat.meta new file mode 100644 index 00000000..50b5c20b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPong.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8e646474e4723334fb6f840dc21e10dc +timeCreated: 1537884663 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPongRotation.mat b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPongRotation.mat new file mode 100644 index 00000000..a7e03051 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPongRotation.mat @@ -0,0 +1,94 @@ +%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: AnimatedPingPongRotation + m_Shader: {fileID: 4800000, guid: 096479cd77bd29a428c2c1be62b9fff1, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedRotationUV_AnimatedRotationUV_Intensity_1: 0.5 + - AnimatedRotationUV_AnimatedRotationUV_PosX_1: 0.5 + - AnimatedRotationUV_AnimatedRotationUV_PosY_1: 0.5 + - AnimatedRotationUV_AnimatedRotationUV_Rotation_1: -16.715 + - AnimatedRotationUV_AnimatedRotationUV_Speed_1: 4.107 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPongRotation.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPongRotation.mat.meta new file mode 100644 index 00000000..0d6f967e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedPingPongRotation.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9db58edf1afb51845aca09c88902e631 +timeCreated: 1537945339 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedTwist.mat b/Assets/2DxFX/ExtraShaders/Material/AnimatedTwist.mat new file mode 100644 index 00000000..826c5e3d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedTwist.mat @@ -0,0 +1,94 @@ +%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: AnimatedTwist + m_Shader: {fileID: 4800000, guid: ba230345268343c4882d33f4be411c79, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedTwistUV_AnimatedTwistUV_Bend_1: 0.354 + - AnimatedTwistUV_AnimatedTwistUV_PosX_1: 0.5 + - AnimatedTwistUV_AnimatedTwistUV_PosY_1: 0.5 + - AnimatedTwistUV_AnimatedTwistUV_Radius_1: 0.5 + - AnimatedTwistUV_AnimatedTwistUV_Speed_1: 2.679 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedTwist.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AnimatedTwist.mat.meta new file mode 100644 index 00000000..a75a3eef --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedTwist.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 41ccbfe55c19ea44ea64b3108b9b58d6 +timeCreated: 1537964209 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedZoom.mat b/Assets/2DxFX/ExtraShaders/Material/AnimatedZoom.mat new file mode 100644 index 00000000..e7a607f7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedZoom.mat @@ -0,0 +1,94 @@ +%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: AnimatedZoom + m_Shader: {fileID: 4800000, guid: a924feaf7456a584896c68aaea2a0806, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedZoomUV_AnimatedZoomUV_Intensity_1: 1.47 + - AnimatedZoomUV_AnimatedZoomUV_PosX_1: 0.48 + - AnimatedZoomUV_AnimatedZoomUV_PosY_1: 0.5 + - AnimatedZoomUV_AnimatedZoomUV_Speed_1: 6.393 + - AnimatedZoomUV_AnimatedZoomUV_Zoom_1: 1 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/AnimatedZoom.mat.meta b/Assets/2DxFX/ExtraShaders/Material/AnimatedZoom.mat.meta new file mode 100644 index 00000000..025be768 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/AnimatedZoom.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b3252ad06dce8e8408d14a04f548f490 +timeCreated: 1537964380 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Automatic2Lerp.mat b/Assets/2DxFX/ExtraShaders/Material/Automatic2Lerp.mat new file mode 100644 index 00000000..5338498d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Automatic2Lerp.mat @@ -0,0 +1,93 @@ +%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: Automatic2Lerp + m_Shader: {fileID: 4800000, guid: 3cdf2c4a762ad3a4eb0b55de184d304e, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AutomaticLerp_Speed_1: 0.487 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Automatic2Lerp.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Automatic2Lerp.mat.meta new file mode 100644 index 00000000..2df93c6b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Automatic2Lerp.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d7226ec1b7e832944a3606bf6976457b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Blur.mat b/Assets/2DxFX/ExtraShaders/Material/Blur.mat new file mode 100644 index 00000000..2f10cc20 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Blur.mat @@ -0,0 +1,94 @@ +%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: Blur + m_Shader: {fileID: 4800000, guid: e0dc2cbfb220a4d468fe85ca66bc4d72, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AutomaticLerp_Speed_1: 0.487 + - _Blur_Intensity_1: 6.9552774 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Blur.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Blur.mat.meta new file mode 100644 index 00000000..269ddba6 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Blur.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 98c04aa50a773b540aaf124e4b0fddb4 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/BlurHQ.mat b/Assets/2DxFX/ExtraShaders/Material/BlurHQ.mat new file mode 100644 index 00000000..1726dbdd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BlurHQ.mat @@ -0,0 +1,95 @@ +%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: BlurHQ + m_Shader: {fileID: 4800000, guid: 1b7e03285e1d48643acc2d60343f35ca, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQ_Intensity_1: 6.9552774 + - _Blur_Intensity_1: 12.560152 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/BlurHQ.mat.meta b/Assets/2DxFX/ExtraShaders/Material/BlurHQ.mat.meta new file mode 100644 index 00000000..72c1e969 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BlurHQ.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d190429bc7d17bd479bc2e9667eec9d0 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/BlurHQPlus.mat b/Assets/2DxFX/ExtraShaders/Material/BlurHQPlus.mat new file mode 100644 index 00000000..1764b60a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BlurHQPlus.mat @@ -0,0 +1,95 @@ +%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: BlurHQPlus + m_Shader: {fileID: 4800000, guid: c648834c94de01d4682911dfc23d9925, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 6.9552774 + - _Blur_Intensity_1: 2.5081654 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/BlurHQPlus.mat.meta b/Assets/2DxFX/ExtraShaders/Material/BlurHQPlus.mat.meta new file mode 100644 index 00000000..30e608d1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BlurHQPlus.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 69582a832341c184f889eeebbddd7622 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/BreakingGlass.mat b/Assets/2DxFX/ExtraShaders/Material/BreakingGlass.mat new file mode 100644 index 00000000..ea667dc9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BreakingGlass.mat @@ -0,0 +1,98 @@ +%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: BreakingGlass + m_Shader: {fileID: 4800000, guid: 2e7d6abf4ea541648b78a2f8dfdefac9, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.071771294 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/BreakingGlass.mat.meta b/Assets/2DxFX/ExtraShaders/Material/BreakingGlass.mat.meta new file mode 100644 index 00000000..8d14388e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BreakingGlass.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d9abe6a3b01351744953696e1615fa4b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/BreakingGlassFull.mat b/Assets/2DxFX/ExtraShaders/Material/BreakingGlassFull.mat new file mode 100644 index 00000000..a7ce014a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BreakingGlassFull.mat @@ -0,0 +1,103 @@ +%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: BreakingGlassFull + m_Shader: {fileID: 4800000, guid: 6ecaaad0f85fdb444aca09447fd8d6d8, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Effect_Fading: 1 + - Glass_Displacement: -0.071771294 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/BreakingGlassFull.mat.meta b/Assets/2DxFX/ExtraShaders/Material/BreakingGlassFull.mat.meta new file mode 100644 index 00000000..ef2d3c78 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BreakingGlassFull.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7435f0edfd9940b41a6a882665caf52d +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/BreakingMirror.mat b/Assets/2DxFX/ExtraShaders/Material/BreakingMirror.mat new file mode 100644 index 00000000..dca63405 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BreakingMirror.mat @@ -0,0 +1,105 @@ +%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: BreakingMirror + m_Shader: {fileID: 4800000, guid: 32f985def6d7fc3429e8d5364cadba4f, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Displacement_Value: -0.041012168 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/BreakingMirror.mat.meta b/Assets/2DxFX/ExtraShaders/Material/BreakingMirror.mat.meta new file mode 100644 index 00000000..89ee3807 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BreakingMirror.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b93bc70dbb9b98c458fb66ec4c2f8123 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Burn.mat b/Assets/2DxFX/ExtraShaders/Material/Burn.mat new file mode 100644 index 00000000..69648f91 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Burn.mat @@ -0,0 +1,107 @@ +%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: Burn + m_Shader: {fileID: 4800000, guid: f2cb24ff3cebf6b459d16d0d31230074, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.39746958 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Burn.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Burn.mat.meta new file mode 100644 index 00000000..d935a414 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Burn.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dc1f712ddb4dd4442bb3ddf765991596 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/BurnPixel.mat b/Assets/2DxFX/ExtraShaders/Material/BurnPixel.mat new file mode 100644 index 00000000..7074938a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BurnPixel.mat @@ -0,0 +1,110 @@ +%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: BurnPixel + m_Shader: {fileID: 4800000, guid: 66bad022b169cdd4dba9332bb9ed02a0, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 19 + - Burn_Seed: 0.482 + - Burn_Value: 0.038146257 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/BurnPixel.mat.meta b/Assets/2DxFX/ExtraShaders/Material/BurnPixel.mat.meta new file mode 100644 index 00000000..13e177fb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/BurnPixel.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4a595699ecd1dce459ee81644994ed84 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/CircleFade.mat b/Assets/2DxFX/ExtraShaders/Material/CircleFade.mat new file mode 100644 index 00000000..1d0a857f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/CircleFade.mat @@ -0,0 +1,114 @@ +%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: CircleFade + m_Shader: {fileID: 4800000, guid: b5538be3e255d204e9584e21a04cbd6e, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: -0.7207562 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/CircleFade.mat.meta b/Assets/2DxFX/ExtraShaders/Material/CircleFade.mat.meta new file mode 100644 index 00000000..dea983cd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/CircleFade.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a4b45b4db1d6eb4489c6626d76206c33 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/CircleHole.mat b/Assets/2DxFX/ExtraShaders/Material/CircleHole.mat new file mode 100644 index 00000000..938c02e4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/CircleHole.mat @@ -0,0 +1,118 @@ +%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: CircleHole + m_Shader: {fileID: 4800000, guid: 57b00ce3c81ac02458df8acc22dff1e0, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0.896854 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/CircleHole.mat.meta b/Assets/2DxFX/ExtraShaders/Material/CircleHole.mat.meta new file mode 100644 index 00000000..f7be0f30 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/CircleHole.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a5b3164b3bc558d40ba3b3554a2c4e4f +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorBrightness.mat b/Assets/2DxFX/ExtraShaders/Material/ColorBrightness.mat new file mode 100644 index 00000000..0f3d07e4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorBrightness.mat @@ -0,0 +1,119 @@ +%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: ColorBrightness + m_Shader: {fileID: 4800000, guid: c2c0f221c10a76143b22154fe196523d, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.94842696 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorBrightness.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorBrightness.mat.meta new file mode 100644 index 00000000..29efbeca --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorBrightness.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0a68d5ca83878ce4ca808889b2ccaddc +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorDarkness.mat b/Assets/2DxFX/ExtraShaders/Material/ColorDarkness.mat new file mode 100644 index 00000000..45eb6579 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorDarkness.mat @@ -0,0 +1,120 @@ +%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: ColorDarkness + m_Shader: {fileID: 4800000, guid: dd705e280a884fc499190318027f767b, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.9999998 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Darkness_Fade_1: 0.94842696 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorDarkness.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorDarkness.mat.meta new file mode 100644 index 00000000..a7fbd190 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorDarkness.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 203023f09e24ee94d9c05a5daead52ed +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorGrayscale.mat b/Assets/2DxFX/ExtraShaders/Material/ColorGrayscale.mat new file mode 100644 index 00000000..8f7242b2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorGrayscale.mat @@ -0,0 +1,120 @@ +%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: ColorGrayscale + m_Shader: {fileID: 4800000, guid: 66425f278d72a5141bc3e79c28c7dd8a, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.94842696 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorGrayscale.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorGrayscale.mat.meta new file mode 100644 index 00000000..50bed51e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorGrayscale.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9e1ec409ed176124fb8f231af0fbb44d +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorHDRCreation.mat b/Assets/2DxFX/ExtraShaders/Material/ColorHDRCreation.mat new file mode 100644 index 00000000..41125448 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorHDRCreation.mat @@ -0,0 +1,121 @@ +%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: ColorHDRCreation + m_Shader: {fileID: 4800000, guid: c62721c5c0286ec4ab5d31877c13feb0, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 3.7937078 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorHDRCreation.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorHDRCreation.mat.meta new file mode 100644 index 00000000..34d82016 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorHDRCreation.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ea74e37c8e1d18a44904a0aba018089d +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorHSV.mat b/Assets/2DxFX/ExtraShaders/Material/ColorHSV.mat new file mode 100644 index 00000000..ace682fd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorHSV.mat @@ -0,0 +1,124 @@ +%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: ColorHSV + m_Shader: {fileID: 4800000, guid: 697455559ccf1954cb3e9a12079c50f0, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 341.43372 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorHSV.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorHSV.mat.meta new file mode 100644 index 00000000..68d95dc1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorHSV.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 128d2dfbb80407c46ba2b30477a456d9 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorNegative.mat b/Assets/2DxFX/ExtraShaders/Material/ColorNegative.mat new file mode 100644 index 00000000..305630e5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorNegative.mat @@ -0,0 +1,125 @@ +%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: ColorNegative + m_Shader: {fileID: 4800000, guid: 0f4ee228c80375042bc9f8b221af8a95, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 1.8968539 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorNegative.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorNegative.mat.meta new file mode 100644 index 00000000..59a6e622 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorNegative.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8f6e919fceecd3241aab3a1ad6904586 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorOnly.mat b/Assets/2DxFX/ExtraShaders/Material/ColorOnly.mat new file mode 100644 index 00000000..d64ce082 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorOnly.mat @@ -0,0 +1,126 @@ +%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: ColorOnly + m_Shader: {fileID: 4800000, guid: e4ee43121a1a8ee4fb2e1a3563404c56, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 1.8968539 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorOnly.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorOnly.mat.meta new file mode 100644 index 00000000..b5702c5f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorOnly.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a7d7645f72e65594288f7380c05d405f +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorRGB.mat b/Assets/2DxFX/ExtraShaders/Material/ColorRGB.mat new file mode 100644 index 00000000..098184d7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorRGB.mat @@ -0,0 +1,127 @@ +%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: ColorRGB + m_Shader: {fileID: 4800000, guid: b772b97be4902f34e8de85d19390240c, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 1.8968539 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorRGB.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorRGB.mat.meta new file mode 100644 index 00000000..6bbe51e4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorRGB.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 557ad0c19e48c934abde36b493041952 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorTint.mat b/Assets/2DxFX/ExtraShaders/Material/ColorTint.mat new file mode 100644 index 00000000..1b1cebeb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorTint.mat @@ -0,0 +1,128 @@ +%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: ColorTint + m_Shader: {fileID: 4800000, guid: 8b492c924c0d4834d9bbff4cf36d3c50, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 1.8968539 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ColorTint.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ColorTint.mat.meta new file mode 100644 index 00000000..7f0d9273 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ColorTint.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c36fc2fb82dabdd4b8c851ec68b190db +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/CompressionTintAdditive.mat b/Assets/2DxFX/ExtraShaders/Material/CompressionTintAdditive.mat new file mode 100644 index 00000000..fe7b78ad --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/CompressionTintAdditive.mat @@ -0,0 +1,130 @@ +%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: CompressionTintAdditive + m_Shader: {fileID: 4800000, guid: 07a7386bb70f1774eb151d2c6599d90d, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 15.174831 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.8706386 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/CompressionTintAdditive.mat.meta b/Assets/2DxFX/ExtraShaders/Material/CompressionTintAdditive.mat.meta new file mode 100644 index 00000000..f3239f9c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/CompressionTintAdditive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 637337dd4e394064c985ea634d53aae7 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/DesintegrationPixel.mat b/Assets/2DxFX/ExtraShaders/Material/DesintegrationPixel.mat new file mode 100644 index 00000000..24ecdade --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DesintegrationPixel.mat @@ -0,0 +1,133 @@ +%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: DesintegrationPixel + m_Shader: {fileID: 4800000, guid: 314173c1abe89844c90a5d9523721081, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0.94842696 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/DesintegrationPixel.mat.meta b/Assets/2DxFX/ExtraShaders/Material/DesintegrationPixel.mat.meta new file mode 100644 index 00000000..833c9b2a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DesintegrationPixel.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 813cb534eba916c4c80cad3480e3ac13 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/DisolveHDR.mat b/Assets/2DxFX/ExtraShaders/Material/DisolveHDR.mat new file mode 100644 index 00000000..03268b5a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DisolveHDR.mat @@ -0,0 +1,135 @@ +%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: DisolveHDR + m_Shader: {fileID: 4800000, guid: 54e81659be3b5a140bb76e0f824c103a, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Value: 0.39746958 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/DisolveHDR.mat.meta b/Assets/2DxFX/ExtraShaders/Material/DisolveHDR.mat.meta new file mode 100644 index 00000000..78e17b30 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DisolveHDR.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ef5a452858b26a840ae3a160fc16b42f +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/DisolvePixel.mat b/Assets/2DxFX/ExtraShaders/Material/DisolvePixel.mat new file mode 100644 index 00000000..96ec3817 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DisolvePixel.mat @@ -0,0 +1,137 @@ +%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: DisolvePixel + m_Shader: {fileID: 4800000, guid: 28b943913f85286418f40e0461cf03a4, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.038146257 + - Displacement_Value: -0.30740225 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/DisolvePixel.mat.meta b/Assets/2DxFX/ExtraShaders/Material/DisolvePixel.mat.meta new file mode 100644 index 00000000..e1d14959 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DisolvePixel.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 65206cb3ecd08a647878d97388c2b146 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Distortion.mat b/Assets/2DxFX/ExtraShaders/Material/Distortion.mat new file mode 100644 index 00000000..7c670bcb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Distortion.mat @@ -0,0 +1,143 @@ +%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: Distortion + m_Shader: {fileID: 4800000, guid: 6a45e81f0ef5049448404eb9bf175d7e, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Distortion.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Distortion.mat.meta new file mode 100644 index 00000000..17325c74 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Distortion.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 30511546d42945f4db49994e2d20b70b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/DoodleDraw.mat b/Assets/2DxFX/ExtraShaders/Material/DoodleDraw.mat new file mode 100644 index 00000000..f52c4bc1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DoodleDraw.mat @@ -0,0 +1,146 @@ +%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: DoodleDraw + m_Shader: {fileID: 4800000, guid: 8bf3764d35b24d74e947dc4ef8004e54, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/DoodleDraw.mat.meta b/Assets/2DxFX/ExtraShaders/Material/DoodleDraw.mat.meta new file mode 100644 index 00000000..8c5f3fa4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/DoodleDraw.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f671211ee68a2734789d7b7241d41d2c +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Emboss.mat b/Assets/2DxFX/ExtraShaders/Material/Emboss.mat new file mode 100644 index 00000000..1dc5f619 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Emboss.mat @@ -0,0 +1,151 @@ +%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: Emboss + m_Shader: {fileID: 4800000, guid: 0ef5c3ed494698749b358bd89a26a549, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _Emboss_Angle_1: -0.9237075 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Emboss.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Emboss.mat.meta new file mode 100644 index 00000000..ed6de8e1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Emboss.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 813614c9b16e53a4f95e5705aaeb24eb +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/EmbossFull.mat b/Assets/2DxFX/ExtraShaders/Material/EmbossFull.mat new file mode 100644 index 00000000..21a31678 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/EmbossFull.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: EmbossFull + m_Shader: {fileID: 4800000, guid: 4059dc51567742e4097cf1479cff7e86, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fading: 1 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: -0.9237075 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/EmbossFull.mat.meta b/Assets/2DxFX/ExtraShaders/Material/EmbossFull.mat.meta new file mode 100644 index 00000000..b7b8cc51 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/EmbossFull.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fc5fc6e73dd9b1d4c8e09ccbee8256b4 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Explode.mat b/Assets/2DxFX/ExtraShaders/Material/Explode.mat new file mode 100644 index 00000000..88d05cde --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Explode.mat @@ -0,0 +1,157 @@ +%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: Explode + m_Shader: {fileID: 4800000, guid: 8255d89154979384691d601c434ee522, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fading: 1 + - Explode_Value: 0.019073129 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Explode.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Explode.mat.meta new file mode 100644 index 00000000..0839c529 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Explode.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0a7ac80dedb67544a97f73ebac78ae4b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/FishEye.mat b/Assets/2DxFX/ExtraShaders/Material/FishEye.mat new file mode 100644 index 00000000..fd319d77 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/FishEye.mat @@ -0,0 +1,159 @@ +%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: FishEye + m_Shader: {fileID: 4800000, guid: 84cd2209de3fd8047bbf4f22c63083e4, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.18546109 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/FishEye.mat.meta b/Assets/2DxFX/ExtraShaders/Material/FishEye.mat.meta new file mode 100644 index 00000000..b979150b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/FishEye.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f388de08011c4bf43a1d92901b8b3145 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Fluo.mat b/Assets/2DxFX/ExtraShaders/Material/Fluo.mat new file mode 100644 index 00000000..fad8c53e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fluo.mat @@ -0,0 +1,160 @@ +%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: Fluo + m_Shader: {fileID: 4800000, guid: 5484ecf8e593e4247ba0c29b884c5171, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.016807199 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.18546109 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Fluo.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Fluo.mat.meta new file mode 100644 index 00000000..cc412d20 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fluo.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8e3041aa6c6f7c34797732421908c853 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Fusion2Sprites.mat b/Assets/2DxFX/ExtraShaders/Material/Fusion2Sprites.mat new file mode 100644 index 00000000..70ad0d64 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fusion2Sprites.mat @@ -0,0 +1,161 @@ +%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: Fusion2Sprites + m_Shader: {fileID: 4800000, guid: 72b228f0feba05649b6ab82b873ebf54, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.016807199 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.18546109 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Fusion2Sprites.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Fusion2Sprites.mat.meta new file mode 100644 index 00000000..1539a2eb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fusion2Sprites.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 203b375f691d24b48a263d03ab83a1d5 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Fusion2SpritesAdditive.mat b/Assets/2DxFX/ExtraShaders/Material/Fusion2SpritesAdditive.mat new file mode 100644 index 00000000..4ee4ff39 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fusion2SpritesAdditive.mat @@ -0,0 +1,162 @@ +%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: Fusion2SpritesAdditive + m_Shader: {fileID: 4800000, guid: 73dc7ade7aa528648b061430c102a1ca, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.016807199 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _Add_Fade_1: 1 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.18546109 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Fusion2SpritesAdditive.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Fusion2SpritesAdditive.mat.meta new file mode 100644 index 00000000..30d41c39 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fusion2SpritesAdditive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eb8846e66a1be8b41bdde39940594782 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Fusion3Sprites.mat b/Assets/2DxFX/ExtraShaders/Material/Fusion3Sprites.mat new file mode 100644 index 00000000..798bc28d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fusion3Sprites.mat @@ -0,0 +1,166 @@ +%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: Fusion3Sprites + m_Shader: {fileID: 4800000, guid: b6cf63a79577f764b964e51a12312ea7, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.016807199 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.18546109 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Fusion3Sprites.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Fusion3Sprites.mat.meta new file mode 100644 index 00000000..0d57c2f9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Fusion3Sprites.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8e8c2dacd1fb415449376b53738b4d56 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/GhostClipping.mat b/Assets/2DxFX/ExtraShaders/Material/GhostClipping.mat new file mode 100644 index 00000000..190c0001 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/GhostClipping.mat @@ -0,0 +1,171 @@ +%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: GhostClipping + m_Shader: {fileID: 4800000, guid: 3db47a6cce66fcc45b1fa61aa1abd809, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.016807199 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 0.18546109 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/GhostClipping.mat.meta b/Assets/2DxFX/ExtraShaders/Material/GhostClipping.mat.meta new file mode 100644 index 00000000..84ef7438 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/GhostClipping.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 09fedb262a702974abf9e5e592070738 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Glitch.mat b/Assets/2DxFX/ExtraShaders/Material/Glitch.mat new file mode 100644 index 00000000..9128324e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Glitch.mat @@ -0,0 +1,172 @@ +%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: Glitch + m_Shader: {fileID: 4800000, guid: dca869258548efe47b75fa579a5bca54, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.016807199 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 2.9673774 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Glitch.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Glitch.mat.meta new file mode 100644 index 00000000..ce056a67 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Glitch.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b03b0631d010605489747d60338016c5 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasite.mat b/Assets/2DxFX/ExtraShaders/Material/HologramParasite.mat new file mode 100644 index 00000000..0e275846 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasite.mat @@ -0,0 +1,174 @@ +%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: HologramParasite + m_Shader: {fileID: 4800000, guid: 8885778bcc7cf884b885f4ba72eeadec, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: 0.021 + - Parasite_Distance: 0.155 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasite.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HologramParasite.mat.meta new file mode 100644 index 00000000..510ac071 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasite.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2532e384e4523f74d9a6561fb1e91948 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasiteAdditive.mat b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteAdditive.mat new file mode 100644 index 00000000..0fc15b33 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteAdditive.mat @@ -0,0 +1,174 @@ +%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: HologramParasiteAdditive + m_Shader: {fileID: 4800000, guid: 365bf37fc596f68478fed67f137dc082, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.251 + - Parasite_Distance: -0.125 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasiteAdditive.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteAdditive.mat.meta new file mode 100644 index 00000000..d275b33f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteAdditive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9d460bd51dc52984fac02768960d8e14 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTint.mat b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTint.mat new file mode 100644 index 00000000..7dc705da --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTint.mat @@ -0,0 +1,174 @@ +%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: HologramParasiteTint + m_Shader: {fileID: 4800000, guid: a757c21eb758ffd4c84dba717c5d1a2d, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTint.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTint.mat.meta new file mode 100644 index 00000000..9ecee952 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTint.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ee6d4e235126cda41ad8acf955ac5ec2 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTintAdditive.mat b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTintAdditive.mat new file mode 100644 index 00000000..49a879d8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTintAdditive.mat @@ -0,0 +1,174 @@ +%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: HologramParasiteTintAdditive + m_Shader: {fileID: 4800000, guid: f72cf2239ac7cdc42bc66eff7aef809e, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTintAdditive.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTintAdditive.mat.meta new file mode 100644 index 00000000..35bcb0fb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramParasiteTintAdditive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d93f410b9f302734e90f9a053062623b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramScanLine.mat b/Assets/2DxFX/ExtraShaders/Material/HologramScanLine.mat new file mode 100644 index 00000000..e12c4139 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramScanLine.mat @@ -0,0 +1,174 @@ +%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: HologramScanLine + m_Shader: {fileID: 4800000, guid: 24089ec03e4e6d84f9798e54a4f2e3fe, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramScanLine.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HologramScanLine.mat.meta new file mode 100644 index 00000000..8325b79f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramScanLine.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d6c44c46a1ebf754bb49357d32579b35 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramScanLineAdditive.mat b/Assets/2DxFX/ExtraShaders/Material/HologramScanLineAdditive.mat new file mode 100644 index 00000000..ce1b0841 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramScanLineAdditive.mat @@ -0,0 +1,174 @@ +%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: HologramScanLineAdditive + m_Shader: {fileID: 4800000, guid: a22ead6f9095085438cc1dfce3584e55, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HologramScanLineAdditive.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HologramScanLineAdditive.mat.meta new file mode 100644 index 00000000..b68c4b0b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HologramScanLineAdditive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4fb6cc6201be25b4483cdecc2d312c04 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Holographic.mat b/Assets/2DxFX/ExtraShaders/Material/Holographic.mat new file mode 100644 index 00000000..36720a7b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Holographic.mat @@ -0,0 +1,176 @@ +%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: Holographic + m_Shader: {fileID: 4800000, guid: 2b20891c56f72794cb9fd16802a7c3a3, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed_1: 1 + - _Hologram_Value_1: 1 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Holographic.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Holographic.mat.meta new file mode 100644 index 00000000..bea3c610 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Holographic.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bb891ad9d756dbe46bc81aa7fa703c63 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HolographicTint.mat b/Assets/2DxFX/ExtraShaders/Material/HolographicTint.mat new file mode 100644 index 00000000..f72ba593 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HolographicTint.mat @@ -0,0 +1,179 @@ +%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: HolographicTint + m_Shader: {fileID: 4800000, guid: b677c954268f0b540b56afc6725ad2de, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HolographicTint.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HolographicTint.mat.meta new file mode 100644 index 00000000..51451d73 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HolographicTint.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3d776797ead97fd43b06bfb1ecbe4bef +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/HolographicTintAdditive.mat b/Assets/2DxFX/ExtraShaders/Material/HolographicTintAdditive.mat new file mode 100644 index 00000000..eeb55740 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HolographicTintAdditive.mat @@ -0,0 +1,179 @@ +%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: HolographicTintAdditive + m_Shader: {fileID: 4800000, guid: f3fd3fc48d5e9524dae38e665e94edea, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/HolographicTintAdditive.mat.meta b/Assets/2DxFX/ExtraShaders/Material/HolographicTintAdditive.mat.meta new file mode 100644 index 00000000..bb5096fd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/HolographicTintAdditive.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fa69ff8536462ec499c739e3b8c7d6ec +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/InfiniteZoom.mat b/Assets/2DxFX/ExtraShaders/Material/InfiniteZoom.mat new file mode 100644 index 00000000..36e52b60 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/InfiniteZoom.mat @@ -0,0 +1,184 @@ +%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: InfiniteZoom + m_Shader: {fileID: 4800000, guid: 978451e277ae84f4e8d89a387d5b7cae, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.39746958 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 0.386 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/InfiniteZoom.mat.meta b/Assets/2DxFX/ExtraShaders/Material/InfiniteZoom.mat.meta new file mode 100644 index 00000000..612ff43f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/InfiniteZoom.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 10547da6a4d8b7b4abd4ce9da67afb18 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/InnerGlow.mat b/Assets/2DxFX/ExtraShaders/Material/InnerGlow.mat new file mode 100644 index 00000000..3a9203c6 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/InnerGlow.mat @@ -0,0 +1,187 @@ +%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: InnerGlow + m_Shader: {fileID: 4800000, guid: 1302b96b232cae941af8656368d57ece, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.3428316 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 15.174831 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 0.386 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/InnerGlow.mat.meta b/Assets/2DxFX/ExtraShaders/Material/InnerGlow.mat.meta new file mode 100644 index 00000000..b58de127 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/InnerGlow.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bbb7b838af0b3c54da10be2befb345f0 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/InsideDistortion.mat b/Assets/2DxFX/ExtraShaders/Material/InsideDistortion.mat new file mode 100644 index 00000000..ad3aebdd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/InsideDistortion.mat @@ -0,0 +1,190 @@ +%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: InsideDistortion + m_Shader: {fileID: 4800000, guid: 8355a635004e37d40a6f13fc89e2d8cb, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.3428316 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.095 + - Inside_Fade: 0.94842696 + - Inside_Rotation: -0.85 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _LerpUV_Fade_1: 0.386 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/InsideDistortion.mat.meta b/Assets/2DxFX/ExtraShaders/Material/InsideDistortion.mat.meta new file mode 100644 index 00000000..90f82863 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/InsideDistortion.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3f7fdc471703e1e45807f333cae5b532 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/JpegCompressionStyle.mat b/Assets/2DxFX/ExtraShaders/Material/JpegCompressionStyle.mat new file mode 100644 index 00000000..92b3f12e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/JpegCompressionStyle.mat @@ -0,0 +1,192 @@ +%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: JpegCompressionStyle + m_Shader: {fileID: 4800000, guid: 2ca0c962c5ac05b4299f4c5806677ad7, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.3428316 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.94842696 + - Inside_Rotation: -0.85 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/JpegCompressionStyle.mat.meta b/Assets/2DxFX/ExtraShaders/Material/JpegCompressionStyle.mat.meta new file mode 100644 index 00000000..9251615e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/JpegCompressionStyle.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 24e027c7d6318dc40bbdbf0f25e00a6e +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Kaleidoscope.mat b/Assets/2DxFX/ExtraShaders/Material/Kaleidoscope.mat new file mode 100644 index 00000000..57d6f540 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Kaleidoscope.mat @@ -0,0 +1,195 @@ +%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: Kaleidoscope + m_Shader: {fileID: 4800000, guid: 07ffa1b76cafac54384178e718329e69, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: c15a3825223d08f48a238359630d20c8, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.94842696 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Kaleidoscope.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Kaleidoscope.mat.meta new file mode 100644 index 00000000..bc7ef5dc --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Kaleidoscope.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: edf057de252404d4a9738c67de51267e +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Lerp2sprites.mat b/Assets/2DxFX/ExtraShaders/Material/Lerp2sprites.mat new file mode 100644 index 00000000..9ed06c1e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Lerp2sprites.mat @@ -0,0 +1,196 @@ +%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: Lerp2sprites + m_Shader: {fileID: 4800000, guid: 176698c2a9ab49945a58af189ac3ebb9, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.4110673 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Lerp_Fade_1: 0.94842696 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Lerp2sprites.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Lerp2sprites.mat.meta new file mode 100644 index 00000000..570aef4e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Lerp2sprites.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a67a46c6a2ef1a0499ea5e555f9629bd +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/LightGlow.mat b/Assets/2DxFX/ExtraShaders/Material/LightGlow.mat new file mode 100644 index 00000000..132c5b28 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/LightGlow.mat @@ -0,0 +1,203 @@ +%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: LightGlow + m_Shader: {fileID: 4800000, guid: 041c3ea843ec4e449a48be4702b425eb, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.4110673 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Lerp_Fade_1: 0.9150102 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _ShadowLight_Intensity_1: 4 + - _ShadowLight_NoSprite_1: 0.94842696 + - _ShadowLight_PosX_1: 0 + - _ShadowLight_PosY_1: 0 + - _ShadowLight_Precision_1: 8 + - _ShadowLight_Size_1: 0.74 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _ShadowLight_Color_1: {r: 0, g: 0.7, b: 1, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/LightGlow.mat.meta b/Assets/2DxFX/ExtraShaders/Material/LightGlow.mat.meta new file mode 100644 index 00000000..98fbff2d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/LightGlow.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 60a31ad48d32f0744922de271d8e0c3a +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/LiquidWave.mat b/Assets/2DxFX/ExtraShaders/Material/LiquidWave.mat new file mode 100644 index 00000000..c1833446 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/LiquidWave.mat @@ -0,0 +1,208 @@ +%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: LiquidWave + m_Shader: {fileID: 4800000, guid: d063f1202ccfa6b41a2d5432308127f9, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.597 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - LiquidUV_DistanceX_1: 0.3 + - LiquidUV_DistanceY_1: 0.3 + - LiquidUV_Speed_1: 1 + - LiquidUV_WaveX_1: 2 + - LiquidUV_WaveY_1: 2 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Lerp_Fade_1: 0.9150102 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _ShadowLight_Intensity_1: 4 + - _ShadowLight_NoSprite_1: 0.6597012 + - _ShadowLight_PosX_1: 0 + - _ShadowLight_PosY_1: 0 + - _ShadowLight_Precision_1: 8 + - _ShadowLight_Size_1: 0.74 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _ShadowLight_Color_1: {r: 0, g: 0.7, b: 1, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/LiquidWave.mat.meta b/Assets/2DxFX/ExtraShaders/Material/LiquidWave.mat.meta new file mode 100644 index 00000000..f306ab86 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/LiquidWave.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c2d62323571e8354abfd614b3b4d339f +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/MotionBlurFast.mat b/Assets/2DxFX/ExtraShaders/Material/MotionBlurFast.mat new file mode 100644 index 00000000..f98ed6e4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/MotionBlurFast.mat @@ -0,0 +1,210 @@ +%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: MotionBlurFast + m_Shader: {fileID: 4800000, guid: f97282f1722a6b24191785c56b80fb50, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.597 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - LiquidUV_DistanceX_1: 0.3 + - LiquidUV_DistanceY_1: 0.3 + - LiquidUV_Speed_1: 1 + - LiquidUV_WaveX_1: 2 + - LiquidUV_WaveY_1: 2 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.89434236 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Lerp_Fade_1: 0.9150102 + - _Metallic: 0 + - _Mode: 0 + - _MotionBlurFast_Angle_1: -0.24 + - _MotionBlurFast_Distance_1: 7.5874157 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _ShadowLight_Intensity_1: 4 + - _ShadowLight_NoSprite_1: 0.6597012 + - _ShadowLight_PosX_1: 0 + - _ShadowLight_PosY_1: 0 + - _ShadowLight_Precision_1: 8 + - _ShadowLight_Size_1: 0.74 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _ShadowLight_Color_1: {r: 0, g: 0.7, b: 1, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/MotionBlurFast.mat.meta b/Assets/2DxFX/ExtraShaders/Material/MotionBlurFast.mat.meta new file mode 100644 index 00000000..3cbc9082 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/MotionBlurFast.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cc395b3b8a8b9ed468c6d3378b49e2d0 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/NightVision.mat b/Assets/2DxFX/ExtraShaders/Material/NightVision.mat new file mode 100644 index 00000000..009edfa0 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/NightVision.mat @@ -0,0 +1,210 @@ +%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: NightVision + m_Shader: {fileID: 4800000, guid: a4e8f207e1aebf347a672fbed1bda9ee, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: -0.30740225 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.597 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - LiquidUV_DistanceX_1: 0.3 + - LiquidUV_DistanceY_1: 0.3 + - LiquidUV_Speed_1: 1 + - LiquidUV_WaveX_1: 2 + - LiquidUV_WaveY_1: 2 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.94842696 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Lerp_Fade_1: 0.9150102 + - _Metallic: 0 + - _Mode: 0 + - _MotionBlurFast_Angle_1: -0.24 + - _MotionBlurFast_Distance_1: 3.6327844 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _ShadowLight_Intensity_1: 4 + - _ShadowLight_NoSprite_1: 0.6597012 + - _ShadowLight_PosX_1: 0 + - _ShadowLight_PosY_1: 0 + - _ShadowLight_Precision_1: 8 + - _ShadowLight_Size_1: 0.74 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _ShadowLight_Color_1: {r: 0, g: 0.7, b: 1, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/NightVision.mat.meta b/Assets/2DxFX/ExtraShaders/Material/NightVision.mat.meta new file mode 100644 index 00000000..5fa04bd3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/NightVision.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 90db568f5c4deca458037e4ca0cef99b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Horizontal.mat b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Horizontal.mat new file mode 100644 index 00000000..a034a7bc --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Horizontal.mat @@ -0,0 +1,210 @@ +%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: NoiseBlur_Horizontal + m_Shader: {fileID: 4800000, guid: 96f538ca3dd288b40adf430ae10ac624, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: 0.448427 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.597 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - LiquidUV_DistanceX_1: 0.3 + - LiquidUV_DistanceY_1: 0.3 + - LiquidUV_Speed_1: 1 + - LiquidUV_WaveX_1: 2 + - LiquidUV_WaveY_1: 2 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.4860856 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Lerp_Fade_1: 0.9150102 + - _Metallic: 0 + - _Mode: 0 + - _MotionBlurFast_Angle_1: -0.24 + - _MotionBlurFast_Distance_1: 3.6327844 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _ShadowLight_Intensity_1: 4 + - _ShadowLight_NoSprite_1: 0.6597012 + - _ShadowLight_PosX_1: 0 + - _ShadowLight_PosY_1: 0 + - _ShadowLight_Precision_1: 8 + - _ShadowLight_Size_1: 0.74 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _ShadowLight_Color_1: {r: 0, g: 0.7, b: 1, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Horizontal.mat.meta b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Horizontal.mat.meta new file mode 100644 index 00000000..f922d533 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Horizontal.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8bf7b52e0340f7f46990ad5f0e70ed91 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Vertical.mat b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Vertical.mat new file mode 100644 index 00000000..1a0c9e51 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Vertical.mat @@ -0,0 +1,210 @@ +%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: NoiseBlur_Vertical + m_Shader: {fileID: 4800000, guid: d9ac1283fa606574a93d25eb171714a2, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + 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} + - _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} + - _NewTex_1: + m_Texture: {fileID: 2800000, guid: 66fedc6e337744c40826daef35f79483, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NewTex_2: + m_Texture: {fileID: 2800000, guid: 80d2b68946bdd4349847218c44f708d1, type: 3} + 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} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1: 0.84 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1: 0 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1: 2.7 + - AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1: 1.31 + - Break_Seed: 1.141 + - Break_Size: 12.1 + - Break_Value: -0.34324664 + - Burn_Pixel_Size: 61 + - Burn_Seed: 0.482 + - Burn_Value: 0.22600284 + - Compression_Value: 9.285 + - Desintegration_Pixel_Size: 19 + - Desintegration_Speed: 0.5 + - Desintegration_Value: 0 + - Disolve_Seed: 0.5 + - Disolve_Value: 0.57083243 + - Displacement_Value: 0.448427 + - DistortionUV_DistanceX_1: 0.507 + - DistortionUV_DistanceY_1: 0.598 + - DistortionUV_Speed_1: 0.71 + - DistortionUV_WaveX_1: 14.9 + - DistortionUV_WaveY_1: 19.8 + - DoodleUV_Frame_1: 10.11 + - DoodleUV_Size_1: 7.22 + - Effect_Fade: 0.597 + - Effect_Fading: 1 + - Explode_Value: 0.35749298 + - FishEyeUV_Size_1: 0.418 + - Glass_Displacement: -0.27332112 + - Glass_Rotation: -0.689 + - Glass_Seed: 1.067 + - Glass_Size: 13.6 + - Inside_Distance: 0.134 + - Inside_Fade: 0.74271876 + - Inside_Rotation: -0.85 + - KaleidoscopeUV_Number_1: 1.65 + - KaleidoscopeUV_PosX_1: 0.5 + - KaleidoscopeUV_PosY_1: 0.5 + - LiquidUV_DistanceX_1: 0.3 + - LiquidUV_DistanceY_1: 0.3 + - LiquidUV_Speed_1: 1 + - LiquidUV_WaveX_1: 2 + - LiquidUV_WaveY_1: 2 + - Parasite_Angle: -0.241 + - Parasite_Distance: -0.247 + - PixelSnap: 0 + - PixelUV_Size_1: 18.6 + - Pixel_Size: 19 + - Seed: 0.6 + - _AutomaticLerp_Speed_1: 0.487 + - _BlurHQPlus_Intensity_1: 32.6 + - _Blur_Intensity_1: -0.2695522 + - _Brightness_Fade_1: 0.2868607 + - _BumpScale: 1 + - _CircleFade_Dist_1: 0.2 + - _CircleFade_PosX_1: 0.559 + - _CircleFade_PosY_1: 0.5 + - _CircleFade_Size_1: 0.54899865 + - _CircleHole_Dist_1: 0.11 + - _CircleHole_PosX_1: 0.5 + - _CircleHole_PosY_1: 0.5 + - _CircleHole_Size_1: 0 + - _ColorFilters_Fade_1: 0.4860856 + - _ColorHSV_Brightness_1: 1.26 + - _ColorHSV_Hue_1: 254.62515 + - _ColorHSV_Saturation_1: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _Destroyer_Speed_1: 0.5 + - _Destroyer_Value_1: 0.32481977 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Effect_Fade: 1 + - _EmbossFull_Angle_1: 0.4936013 + - _EmbossFull_Distance_1: 3.03 + - _EmbossFull_Intensity_1: 0.46 + - _EmbossFull_grayfade_1: 2 + - _EmbossFull_original_1: 1 + - _Emboss_Angle_1: -0.9955175 + - _Emboss_Distance_1: 3.61 + - _Emboss_Intensity_1: 0.18 + - _Emboss_grayfade_1: 1.28 + - _Emboss_original_1: 1 + - _GhostFX_ClipDown_1: 15.942461 + - _GhostFX_ClipLeft_1: 0.566 + - _GhostFX_ClipRight_1: 0.433 + - _GhostFX_ClipUp_1: 0.705 + - _GhostFX_Smooth_1: 0.488 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GrayScale_Fade_1: 0.44531453 + - _HdrCreate_Value_1: 0.8300257 + - _Hologram_Speed: 1.57 + - _Hologram_Speed_1: 1 + - _Hologram_Value: 0.647 + - _Hologram_Value_1: 1 + - _InnerGlowHQ_Intensity_1: 5.05 + - _InnerGlowHQ_Size_1: 0.44944826 + - _InverseColor_Fade_1: 0.9232315 + - _Jpeg_Compression_1: 0.436 + - _LerpUV_Fade_1: 0.386 + - _Lerp_Fade_1: 0.9150102 + - _Metallic: 0 + - _Mode: 0 + - _MotionBlurFast_Angle_1: -0.24 + - _MotionBlurFast_Distance_1: 3.6327844 + - _OcclusionStrength: 1 + - _OperationBlend_Fade_1: 1 + - _OperationBlend_Fade_2: 1 + - _Parallax: 0.02 + - _ShadowLight_Intensity_1: 4 + - _ShadowLight_NoSprite_1: 0.6597012 + - _ShadowLight_PosX_1: 0 + - _ShadowLight_PosY_1: 0 + - _ShadowLight_Precision_1: 8 + - _ShadowLight_Size_1: 0.74 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpriteFade: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _ZWrite: 1 + - __CompressionFX_Value_1: 0.5507562 + m_Colors: + - Tint_Color: {r: 0, g: 0.9117646, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorRGBA_Color_1: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _FillColor_Color_1: {r: 0.3814879, g: 1, b: 0.1911765, a: 1} + - _InnerGlowHQ_Color_1: {r: 1, g: 0.08088237, b: 0, a: 1} + - _ShadowLight_Color_1: {r: 0, g: 0.7, b: 1, a: 1} + - _TintColor: {r: 0, g: 0.647059, b: 1, a: 1} + - _TintRGBA_Color_1: {r: 1, g: 0.7941177, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Vertical.mat.meta b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Vertical.mat.meta new file mode 100644 index 00000000..e16d6b6c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/NoiseBlur_Vertical.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e9db5b8e2aa452d4bb69f0d7485b5d1b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Offset.mat b/Assets/2DxFX/ExtraShaders/Material/Offset.mat new file mode 100644 index 00000000..3df7f06b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Offset.mat @@ -0,0 +1,43 @@ +%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: Offset + m_Shader: {fileID: 4800000, guid: f6390e3c458302344aee9fbdddd85778, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Offset.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Offset.mat.meta new file mode 100644 index 00000000..776f0af0 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Offset.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 82cc69615061bff44ab06e499814c002 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Outline.mat b/Assets/2DxFX/ExtraShaders/Material/Outline.mat new file mode 100644 index 00000000..082dd55e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Outline.mat @@ -0,0 +1,46 @@ +%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: Outline + m_Shader: {fileID: 4800000, guid: c55ac620ffcb93c45acc8208663b6736, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Outline.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Outline.mat.meta new file mode 100644 index 00000000..b61ddd62 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Outline.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9c08bf20737bfad498e26b4a21540853 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/OutlineEmpty.mat b/Assets/2DxFX/ExtraShaders/Material/OutlineEmpty.mat new file mode 100644 index 00000000..031e7d6d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/OutlineEmpty.mat @@ -0,0 +1,48 @@ +%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: OutlineEmpty + m_Shader: {fileID: 4800000, guid: bf9f07460f756294b9592cfd2cd27545, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/OutlineEmpty.mat.meta b/Assets/2DxFX/ExtraShaders/Material/OutlineEmpty.mat.meta new file mode 100644 index 00000000..d253d58c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/OutlineEmpty.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ce739a81fba56cd49b902e14ff38a731 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Perspective3D.mat b/Assets/2DxFX/ExtraShaders/Material/Perspective3D.mat new file mode 100644 index 00000000..5c766365 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Perspective3D.mat @@ -0,0 +1,53 @@ +%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: Perspective3D + m_Shader: {fileID: 4800000, guid: 049a16c6bc92f734c80934ed78783d84, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: 0.1793708 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Perspective3D.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Perspective3D.mat.meta new file mode 100644 index 00000000..4135bbdf --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Perspective3D.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 59daa1c6364edfb4db7bf9aab0d2d829 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Pinch.mat b/Assets/2DxFX/ExtraShaders/Material/Pinch.mat new file mode 100644 index 00000000..2b8d1654 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Pinch.mat @@ -0,0 +1,55 @@ +%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: Pinch + m_Shader: {fileID: 4800000, guid: 43c6716f2ab4330448d6ffc6dac59da1, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.07277027 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Pinch.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Pinch.mat.meta new file mode 100644 index 00000000..98e7d96b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Pinch.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 16b0f9ac963c82f41846441128804c10 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/PixelExplosion.mat b/Assets/2DxFX/ExtraShaders/Material/PixelExplosion.mat new file mode 100644 index 00000000..32d8dc43 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/PixelExplosion.mat @@ -0,0 +1,57 @@ +%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: PixelExplosion + m_Shader: {fileID: 4800000, guid: 0e6e4d21baf68d04a872086a6e089dc6, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.57277024 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - Pixel_Size: 42.5 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/PixelExplosion.mat.meta b/Assets/2DxFX/ExtraShaders/Material/PixelExplosion.mat.meta new file mode 100644 index 00000000..6b74f016 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/PixelExplosion.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7d3406740d97cf1468126e2393d1748f +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/PixelGravityDie.mat b/Assets/2DxFX/ExtraShaders/Material/PixelGravityDie.mat new file mode 100644 index 00000000..4f396608 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/PixelGravityDie.mat @@ -0,0 +1,59 @@ +%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: PixelGravityDie + m_Shader: {fileID: 4800000, guid: 70d75664cea27174388abd94cd6f75a8, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 48 + - Pixel_Fade: 0.39746958 + - Pixel_Size: 42.5 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/PixelGravityDie.mat.meta b/Assets/2DxFX/ExtraShaders/Material/PixelGravityDie.mat.meta new file mode 100644 index 00000000..8bb7eec9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/PixelGravityDie.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3d5a7f32af9fdaa4585cd1092d6e1a8b +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Pixelisation.mat b/Assets/2DxFX/ExtraShaders/Material/Pixelisation.mat new file mode 100644 index 00000000..d8999b20 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Pixelisation.mat @@ -0,0 +1,60 @@ +%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: Pixelisation + m_Shader: {fileID: 4800000, guid: 2a42586fa794a324583d1b743990c4bb, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 25.438053 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Pixelisation.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Pixelisation.mat.meta new file mode 100644 index 00000000..405b2a95 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Pixelisation.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f2ecbaf3928e5d84498c0b5ade40ce6e +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/PixelisationXY.mat b/Assets/2DxFX/ExtraShaders/Material/PixelisationXY.mat new file mode 100644 index 00000000..e873a1fd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/PixelisationXY.mat @@ -0,0 +1,62 @@ +%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: PixelisationXY + m_Shader: {fileID: 4800000, guid: 05b5cd5b52404154dac382cb03b0e28b, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 6.430416 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/PixelisationXY.mat.meta b/Assets/2DxFX/ExtraShaders/Material/PixelisationXY.mat.meta new file mode 100644 index 00000000..2e3c1bb7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/PixelisationXY.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 211b0ea32295b494c93f2502c375129e +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Plasma.mat b/Assets/2DxFX/ExtraShaders/Material/Plasma.mat new file mode 100644 index 00000000..168ed83f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Plasma.mat @@ -0,0 +1,64 @@ +%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: Plasma + m_Shader: {fileID: 4800000, guid: 36b5905494e89644186abc68a646553b, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Plasma.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Plasma.mat.meta new file mode 100644 index 00000000..2a657310 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Plasma.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f6d70d1362798ad4480d22f6b710e89e +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Repeat.mat b/Assets/2DxFX/ExtraShaders/Material/Repeat.mat new file mode 100644 index 00000000..4d7b2f47 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Repeat.mat @@ -0,0 +1,65 @@ +%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: Repeat + m_Shader: {fileID: 4800000, guid: f6fefeda4f5dc5c4cac887c9a3e4830c, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - Repeat: 6.602852 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Repeat.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Repeat.mat.meta new file mode 100644 index 00000000..b6ca0977 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Repeat.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 663a4df2dfbb480458314926addce684 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroC64.mat b/Assets/2DxFX/ExtraShaders/Material/RetroC64.mat new file mode 100644 index 00000000..e63659df --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroC64.mat @@ -0,0 +1,66 @@ +%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: RetroC64 + m_Shader: {fileID: 4800000, guid: 6ab181dfb50c5fb4b97059152dee66ea, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - Repeat: 11.783579 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TurnC64_Fade_1: 1 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroC64.mat.meta b/Assets/2DxFX/ExtraShaders/Material/RetroC64.mat.meta new file mode 100644 index 00000000..393979da --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroC64.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6d829c239b41cb645afb7ef78c4cdb03 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroCGA.mat b/Assets/2DxFX/ExtraShaders/Material/RetroCGA.mat new file mode 100644 index 00000000..3c6ab9db --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroCGA.mat @@ -0,0 +1,67 @@ +%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: RetroCGA + m_Shader: {fileID: 4800000, guid: d737a86d1c85e414d9d38f322165f481, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - Repeat: 11.783579 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TurnC64_Fade_1: 1 + - _TurnCGA_Fade_1: 1 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroCGA.mat.meta b/Assets/2DxFX/ExtraShaders/Material/RetroCGA.mat.meta new file mode 100644 index 00000000..97ea2688 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroCGA.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0fc7c36614c9ed247bb3aa86ace5e5f8 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroCGA2.mat b/Assets/2DxFX/ExtraShaders/Material/RetroCGA2.mat new file mode 100644 index 00000000..4105c995 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroCGA2.mat @@ -0,0 +1,68 @@ +%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: RetroCGA2 + m_Shader: {fileID: 4800000, guid: 9838fdc97e5ab944697dc5110c2256fa, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - Repeat: 11.783579 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TurnC64_Fade_1: 1 + - _TurnCGA2_Fade_1: 1 + - _TurnCGA_Fade_1: 1 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroCGA2.mat.meta b/Assets/2DxFX/ExtraShaders/Material/RetroCGA2.mat.meta new file mode 100644 index 00000000..0bb447d8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroCGA2.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f2fc247796507ac4db8ccdd7341589ba +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroEGA.mat b/Assets/2DxFX/ExtraShaders/Material/RetroEGA.mat new file mode 100644 index 00000000..906d2377 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroEGA.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: RetroEGA + m_Shader: {fileID: 4800000, guid: 8412bcf8a08f6364bac175aa75c7f339, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - Repeat: 11.783579 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TurnC64_Fade_1: 1 + - _TurnCGA2_Fade_1: 1 + - _TurnCGA_Fade_1: 1 + - _TurnEGA_Fade_1: 1 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroEGA.mat.meta b/Assets/2DxFX/ExtraShaders/Material/RetroEGA.mat.meta new file mode 100644 index 00000000..e8ad92ff --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroEGA.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a8af200bbb701e94cb0a47653d36935a +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroGB.mat b/Assets/2DxFX/ExtraShaders/Material/RetroGB.mat new file mode 100644 index 00000000..0e418d0b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroGB.mat @@ -0,0 +1,70 @@ +%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: RetroGB + m_Shader: {fileID: 4800000, guid: e6761d168b72f2d499b161bbb0c19e17, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - Repeat: 11.783579 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TurnC64_Fade_1: 1 + - _TurnCGA2_Fade_1: 1 + - _TurnCGA_Fade_1: 1 + - _TurnEGA_Fade_1: 1 + - _TurnGB_Fade_1: 1 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/RetroGB.mat.meta b/Assets/2DxFX/ExtraShaders/Material/RetroGB.mat.meta new file mode 100644 index 00000000..177671c9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RetroGB.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0e1b35644410bf94d884855bc360b5f6 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/RoarDistortion.mat b/Assets/2DxFX/ExtraShaders/Material/RoarDistortion.mat new file mode 100644 index 00000000..a6342cbc --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RoarDistortion.mat @@ -0,0 +1,76 @@ +%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: RoarDistortion + m_Shader: {fileID: 4800000, guid: dd702c23ee76e8c4db43b78cbbe5509e, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - LineSize: 1.7 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - PosX: 0.508 + - PosY: 0.5 + - Repeat: 11.783579 + - Roar_Intensity: 0.041 + - Size: 1.091 + - Speed: 0.96 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TurnC64_Fade_1: 1 + - _TurnCGA2_Fade_1: 1 + - _TurnCGA_Fade_1: 1 + - _TurnEGA_Fade_1: 1 + - _TurnGB_Fade_1: 1 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/RoarDistortion.mat.meta b/Assets/2DxFX/ExtraShaders/Material/RoarDistortion.mat.meta new file mode 100644 index 00000000..30805781 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/RoarDistortion.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1cfa47ea65eb00745b6fd8cc84cceef9 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Shake.mat b/Assets/2DxFX/ExtraShaders/Material/Shake.mat new file mode 100644 index 00000000..948ede6c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Shake.mat @@ -0,0 +1,80 @@ +%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: Shake + m_Shader: {fileID: 4800000, guid: 74ecf4602f4684c43ac3606ad131e05f, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Effect_Fade: 1 + - ExplosionValue: 0.30580708 + - Intensity_X: 1 + - Intensity_Y: 0.09 + - LineSize: 1.7 + - OffsetUV_X_1: 0 + - OffsetUV_Y_1: 0.445 + - OffsetUV_ZoomX_1: 1 + - OffsetUV_ZoomY_1: 1 + - Offset_X: 0 + - Offset_Y: 0.0378 + - PinchUV_Size_1: 0.2540917 + - PixelUV_Size: 18.74812 + - PixelUV_Size_1: 0.93249893 + - PixelXYUV_SizeX_1: 1.6974165 + - PixelXYUV_SizeY_1: 32 + - Pixel_Fade: 18.82359 + - Pixel_Size: 42.5 + - PosX: 0.508 + - PosY: 0.5 + - Repeat: 11.783579 + - Roar_Intensity: 0.041 + - Size: 1.091 + - Speed: 0.544 + - _ColorMask: 15 + - _LerpUV_Fade_1: 1 + - _Make3DFX_Dist_1: -0.36862513 + - _Make3DFX_Light_1: -0.64 + - _Make3DFX_PosX_1: 0.53 + - _Make3DFX_PosY_1: -1.81 + - _Make3DFX_Size_1: 8.58 + - _OutlineEmpty_Size_1: 1 + - _Outline_HDR_1: 1 + - _Outline_Size_1: 1.14 + - _PlasmaFX_Fade_1: 0.5 + - _PlasmaFX_Speed_1: 0.612 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TurnC64_Fade_1: 1 + - _TurnCGA2_Fade_1: 1 + - _TurnCGA_Fade_1: 1 + - _TurnEGA_Fade_1: 1 + - _TurnGB_Fade_1: 1 + m_Colors: + - _OutlineEmpty_Color_1: {r: 1, g: 1, b: 1, a: 1} + - _Outline_Color_1: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Shake.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Shake.mat.meta new file mode 100644 index 00000000..0c3f6a93 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Shake.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4531ffa2362affb46b160d2507f62f46 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Sharpness.mat b/Assets/2DxFX/ExtraShaders/Material/Sharpness.mat new file mode 100644 index 00000000..564b7365 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Sharpness.mat @@ -0,0 +1,43 @@ +%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: Sharpness + m_Shader: {fileID: 4800000, guid: 3e45fcdb1696f8f4994f55f37b85c49a, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Sharpness.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Sharpness.mat.meta new file mode 100644 index 00000000..5eedcc15 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Sharpness.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b975c6287d3a1ac4099095d6cb7e116d +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ShinyFX.mat b/Assets/2DxFX/ExtraShaders/Material/ShinyFX.mat new file mode 100644 index 00000000..edaf3745 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ShinyFX.mat @@ -0,0 +1,48 @@ +%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: ShinyFX + m_Shader: {fileID: 4800000, guid: db76a7109bf66fd41ba25c7bcd903030, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ShinyFX.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ShinyFX.mat.meta new file mode 100644 index 00000000..1f07fad6 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ShinyFX.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a56c3c5def87cf047beb832bf5257b63 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ShinyPixel.mat b/Assets/2DxFX/ExtraShaders/Material/ShinyPixel.mat new file mode 100644 index 00000000..c545dbc8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ShinyPixel.mat @@ -0,0 +1,51 @@ +%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: ShinyPixel + m_Shader: {fileID: 4800000, guid: 706845714369ad7459477c6c31868cb2, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - PixelSnap: 0 + - Pixel_Size: 22 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ShinyPixel.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ShinyPixel.mat.meta new file mode 100644 index 00000000..07cacecd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ShinyPixel.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b880f30ce2850034680b5e2b91cbde82 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortion.mat b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortion.mat new file mode 100644 index 00000000..635e16f5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortion.mat @@ -0,0 +1,54 @@ +%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: SymbioseDistortion + m_Shader: {fileID: 4800000, guid: 73ada674d174bb04ea7c87563210fa61, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: 0.02009505 + - Symbiose_Position: -0.209 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortion.mat.meta b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortion.mat.meta new file mode 100644 index 00000000..6c0d4d48 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortion.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ecf0b510673a42a448987dc9c899dd73 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortionFix.mat b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortionFix.mat new file mode 100644 index 00000000..3d21a348 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortionFix.mat @@ -0,0 +1,54 @@ +%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: SymbioseDistortionFix + m_Shader: {fileID: 4800000, guid: 3012c1f80e8db2f408db03a9ecd8c101, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: 0.3465204 + - Symbiose_Position: -0.218 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortionFix.mat.meta b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortionFix.mat.meta new file mode 100644 index 00000000..dc58be0d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/SymbioseDistortionFix.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5727f8ceef09c754fa43c94ba6e7fe46 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Threshold.mat b/Assets/2DxFX/ExtraShaders/Material/Threshold.mat new file mode 100644 index 00000000..abfb115b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Threshold.mat @@ -0,0 +1,55 @@ +%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: Threshold + m_Shader: {fileID: 4800000, guid: db57356aed97b4042bf18648f181f097, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: 0.3465204 + - Symbiose_Position: -0.209 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Threshold.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Threshold.mat.meta new file mode 100644 index 00000000..92fa8c10 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Threshold.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 11907dc68cffcbc4ea597f64c665212c +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/ThresholdSmooth.mat b/Assets/2DxFX/ExtraShaders/Material/ThresholdSmooth.mat new file mode 100644 index 00000000..32b55a23 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ThresholdSmooth.mat @@ -0,0 +1,57 @@ +%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: ThresholdSmooth + m_Shader: {fileID: 4800000, guid: e8ac8964a9509cb4f9922b211bbbe332, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: 0.3465204 + - Symbiose_Position: -0.209 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/ThresholdSmooth.mat.meta b/Assets/2DxFX/ExtraShaders/Material/ThresholdSmooth.mat.meta new file mode 100644 index 00000000..ef17b308 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/ThresholdSmooth.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a519c43dc27ecb0429b9499dfd2cab89 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Tilt_Down.mat b/Assets/2DxFX/ExtraShaders/Material/Tilt_Down.mat new file mode 100644 index 00000000..0083cfb0 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Tilt_Down.mat @@ -0,0 +1,58 @@ +%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: Tilt_Down + m_Shader: {fileID: 4800000, guid: a66674fe644f9c944b85d0be884b6d99, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: 0.1470175 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Tilt_Down.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Tilt_Down.mat.meta new file mode 100644 index 00000000..477fdb03 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Tilt_Down.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7a35ff88a0006374c863f0b2b74416b7 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Tilt_Left.mat b/Assets/2DxFX/ExtraShaders/Material/Tilt_Left.mat new file mode 100644 index 00000000..3851c396 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Tilt_Left.mat @@ -0,0 +1,59 @@ +%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: Tilt_Left + m_Shader: {fileID: 4800000, guid: 59e49c233721da848be9585c131dcb65, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: 0.107494876 + - TiltLeftUV_TiltLeftUV_Value_1: 0.1470175 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Tilt_Left.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Tilt_Left.mat.meta new file mode 100644 index 00000000..69525a4d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Tilt_Left.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b3e054666dc7a5c4babd3bcee88f6d05 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Tilt_Right.mat b/Assets/2DxFX/ExtraShaders/Material/Tilt_Right.mat new file mode 100644 index 00000000..8c4aae8d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Tilt_Right.mat @@ -0,0 +1,59 @@ +%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: Tilt_Right + m_Shader: {fileID: 4800000, guid: 55dd624ab1433d14bb5580c0e8fb35b0, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1470175 + - _ColorMask: 15 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Tilt_Right.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Tilt_Right.mat.meta new file mode 100644 index 00000000..8368fc61 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Tilt_Right.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a5c958c3074a2646a5fc2769617dbdd +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnFire.mat b/Assets/2DxFX/ExtraShaders/Material/TurnFire.mat new file mode 100644 index 00000000..4032ea24 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnFire.mat @@ -0,0 +1,61 @@ +%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: TurnFire + m_Shader: {fileID: 4800000, guid: c46ee521892674a4d848a6d297cc9bb6, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1388548 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnFire.mat.meta b/Assets/2DxFX/ExtraShaders/Material/TurnFire.mat.meta new file mode 100644 index 00000000..daa3d5fd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnFire.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e32e85a20be784a4784ef9ab065868ea +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnFirePixel.mat b/Assets/2DxFX/ExtraShaders/Material/TurnFirePixel.mat new file mode 100644 index 00000000..8ce7af75 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnFirePixel.mat @@ -0,0 +1,64 @@ +%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: TurnFirePixel + m_Shader: {fileID: 4800000, guid: 1bfa6071b9fcc2d43ad8934b94d84b9e, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - Fire_Addition: 0.33 + - Fire_Displacement_Value: -0.003 + - Fire_Pixel_Size: 20.3 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1388548 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnFirePixel.mat.meta b/Assets/2DxFX/ExtraShaders/Material/TurnFirePixel.mat.meta new file mode 100644 index 00000000..783b64e4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnFirePixel.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 03fa9a215b6311c41afad2530c47a7e6 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnGold.mat b/Assets/2DxFX/ExtraShaders/Material/TurnGold.mat new file mode 100644 index 00000000..3eaadfbb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnGold.mat @@ -0,0 +1,62 @@ +%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: TurnGold + m_Shader: {fileID: 4800000, guid: 96fe7f2e8da185a46aa13ea51d527610, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1388548 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + - _TurnGold_Speed_1: 1 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnGold.mat.meta b/Assets/2DxFX/ExtraShaders/Material/TurnGold.mat.meta new file mode 100644 index 00000000..f9f6d7eb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnGold.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 55781bda53788aa48a034e646edcb834 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnLiquid.mat b/Assets/2DxFX/ExtraShaders/Material/TurnLiquid.mat new file mode 100644 index 00000000..bf1d82f2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnLiquid.mat @@ -0,0 +1,67 @@ +%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: TurnLiquid + m_Shader: {fileID: 4800000, guid: f10d538baa768044d8d1405430746161, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - DistanceX: 0.3 + - DistanceY: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Speed: 1 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.0774262 + - TurnLiquid_Value: 0.10047525 + - WaveX: 2 + - WaveY: 2 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnLiquid.mat.meta b/Assets/2DxFX/ExtraShaders/Material/TurnLiquid.mat.meta new file mode 100644 index 00000000..2aab3e0a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnLiquid.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 110c611d26d33a24a9ac55a062c8f88e +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnMetal.mat b/Assets/2DxFX/ExtraShaders/Material/TurnMetal.mat new file mode 100644 index 00000000..17fe302a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnMetal.mat @@ -0,0 +1,62 @@ +%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: TurnMetal + m_Shader: {fileID: 4800000, guid: c67ece7a22944434c9f20ddc93e3f544, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1388548 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + - _TurnMetal_Speed_1: 1 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnMetal.mat.meta b/Assets/2DxFX/ExtraShaders/Material/TurnMetal.mat.meta new file mode 100644 index 00000000..b9596c4b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnMetal.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe5345a3a38e3af42a6eaddb9ac0f9da +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnToInfinite.mat b/Assets/2DxFX/ExtraShaders/Material/TurnToInfinite.mat new file mode 100644 index 00000000..bcc68437 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnToInfinite.mat @@ -0,0 +1,68 @@ +%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: TurnToInfinite + m_Shader: {fileID: 4800000, guid: a812ac7caf32dcc4dab9e2c9cc834940, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - Intensity: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - PosX: 0 + - PosY: 0 + - Speed: 1 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1388548 + - TurnToInfinite_Value: 0.452 + - Zoom: 1 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + - _TurnMetal_Speed_1: 1 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnToInfinite.mat.meta b/Assets/2DxFX/ExtraShaders/Material/TurnToInfinite.mat.meta new file mode 100644 index 00000000..43bf3b5e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnToInfinite.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0acd1c1a800d0f44ebe495495813e574 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnTransparent.mat b/Assets/2DxFX/ExtraShaders/Material/TurnTransparent.mat new file mode 100644 index 00000000..bb438417 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnTransparent.mat @@ -0,0 +1,64 @@ +%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: TurnTransparent + m_Shader: {fileID: 4800000, guid: 59014558153d8874aaf4011117fd9630, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1388548 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + - _TurnMetal_Speed_1: 1 + - _TurnTransparent_Speed_1: 1 + m_Colors: + - _FillColor_Color_1: {r: 0.99655175, g: 0.9191176, b: 0.875, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/TurnTransparent.mat.meta b/Assets/2DxFX/ExtraShaders/Material/TurnTransparent.mat.meta new file mode 100644 index 00000000..e26f61c5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/TurnTransparent.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7a6cd94082052f447b9e8e2f33c1ab8d +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Twist.mat b/Assets/2DxFX/ExtraShaders/Material/Twist.mat new file mode 100644 index 00000000..f8f13812 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Twist.mat @@ -0,0 +1,67 @@ +%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: Twist + m_Shader: {fileID: 4800000, guid: 9cc1d16419310b343a39291f202c5dbf, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.1388548 + - TwistUV_TwistUV_Bend_1: 0.9801166 + - TwistUV_TwistUV_PosX_1: 0.5 + - TwistUV_TwistUV_PosY_1: 0.5 + - TwistUV_TwistUV_Radius_1: 0.5 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _LerpUV_Fade_1: 1 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + - _TurnMetal_Speed_1: 1 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Twist.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Twist.mat.meta new file mode 100644 index 00000000..0678b36f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Twist.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 276dbb0232035e04695ae95baa3d36fb +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Vintage.mat b/Assets/2DxFX/ExtraShaders/Material/Vintage.mat new file mode 100644 index 00000000..8737de33 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Vintage.mat @@ -0,0 +1,63 @@ +%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: Vintage + m_Shader: {fileID: 4800000, guid: 2ae634f0958330a4d8d700a8e731044a, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: -0.0381003 + - _ColorFilters_Fade_1: 1 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + - _TurnMetal_Speed_1: 1 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Vintage.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Vintage.mat.meta new file mode 100644 index 00000000..297b87bd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Vintage.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 32a2da8899dc35c45ac5d100c59e226f +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/Zoom.mat b/Assets/2DxFX/ExtraShaders/Material/Zoom.mat new file mode 100644 index 00000000..233d313b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Zoom.mat @@ -0,0 +1,66 @@ +%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: Zoom + m_Shader: {fileID: 4800000, guid: 6a810a97337789d42b8555b0183cd16f, type: 3} + m_ValidKeywords: + - ETC1_EXTERNAL_ALPHA + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + 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: + - Displacement_Value: 0.3 + - Effect_Fading: 1 + - PixelSnap: 0 + - Pixel_Size: 22 + - Symbiose_Distance: -0.012881077 + - Symbiose_Position: -0.209 + - TiltDownUV_TiltDownUV_Value_1: -0.14888936 + - TiltRightUV_TiltRightUV_Value_1: 0.7104318 + - ZoomUV_PosX_1: 0.5 + - ZoomUV_PosY_1: 0.5 + - ZoomUV_Zoom_1: 1.9801166 + - _ColorMask: 15 + - _Fire_Addition_Value: 0.5 + - _Fire_Displacement_Value: 0 + - _LerpUV_Fade_1: 1 + - _Sharpness_Angle_1: 0.25 + - _Sharpness_Distance_1: 2.66 + - _Sharpness_Fade_1: 1 + - _Sharpness_Intensity_1: 0.19 + - _Sharpness_original_1: 1 + - _ShinyFX_Intensity_1: 1 + - _ShinyFX_Pos_1: 0 + - _ShinyFX_Size_1: -0.1 + - _ShinyFX_Smooth_1: 0.25 + - _ShinyFX_Speed_1: 1 + - _SpriteFade: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _ThresholdSmooth_Smooth_1: 0.118 + - _ThresholdSmooth_Value_1: 0.53 + - _Threshold_Fade_1: 0.5 + - _TurnMetal_Speed_1: 1 + m_Colors: [] + m_BuildTextureStacks: [] diff --git a/Assets/2DxFX/ExtraShaders/Material/Zoom.mat.meta b/Assets/2DxFX/ExtraShaders/Material/Zoom.mat.meta new file mode 100644 index 00000000..8c72079e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/Zoom.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7285c28c1d18b1f4ea9c08c8f9f90837 +timeCreated: 1537970469 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Material/txt.txt b/Assets/2DxFX/ExtraShaders/Material/txt.txt new file mode 100644 index 00000000..c163c92f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/txt.txt @@ -0,0 +1,209 @@ +Additive.mat +Additive.mat.meta +AlphaIntensity.mat +AlphaIntensity.mat.meta +AnimatedBurn.mat +AnimatedBurn.mat.meta +AnimatedMovement.mat +AnimatedMovement.mat.meta +AnimatedOffset.mat +AnimatedOffset.mat.meta +AnimatedPingPong.mat +AnimatedPingPong.mat.meta +AnimatedPingPongRotation.mat +AnimatedPingPongRotation.mat.meta +AnimatedTwist.mat +AnimatedTwist.mat.meta +AnimatedZoom.mat +AnimatedZoom.mat.meta +Automatic2Lerp.mat +Automatic2Lerp.mat.meta +Blur.mat +Blur.mat.meta +BlurHQ.mat +BlurHQ.mat.meta +BlurHQPlus.mat +BlurHQPlus.mat.meta +BreakingGlass.mat +BreakingGlass.mat.meta +BreakingGlassFull.mat +BreakingGlassFull.mat.meta +BreakingMirror.mat +BreakingMirror.mat.meta +Burn.mat +Burn.mat.meta +BurnPixel.mat +BurnPixel.mat.meta +CircleFade.mat +CircleFade.mat.meta +CircleHole.mat +CircleHole.mat.meta +ColorBrightness.mat +ColorBrightness.mat.meta +ColorDarkness.mat +ColorDarkness.mat.meta +ColorGrayscale.mat +ColorGrayscale.mat.meta +ColorHDRCreation.mat +ColorHDRCreation.mat.meta +ColorHSV.mat +ColorHSV.mat.meta +ColorNegative.mat +ColorNegative.mat.meta +ColorOnly.mat +ColorOnly.mat.meta +ColorRGB.mat +ColorRGB.mat.meta +ColorTint.mat +ColorTint.mat.meta +CompressionTintAdditive.mat +CompressionTintAdditive.mat.meta +DesintegrationPixel.mat +DesintegrationPixel.mat.meta +DisolveHDR.mat +DisolveHDR.mat.meta +DisolvePixel.mat +DisolvePixel.mat.meta +Distortion.mat +Distortion.mat.meta +DoodleDraw.mat +DoodleDraw.mat.meta +Emboss.mat +Emboss.mat.meta +EmbossFull.mat +EmbossFull.mat.meta +Explode.mat +Explode.mat.meta +FishEye.mat +FishEye.mat.meta +Fluo.mat +Fluo.mat.meta +Fusion2Sprites.mat +Fusion2Sprites.mat.meta +Fusion2SpritesAdditive.mat +Fusion2SpritesAdditive.mat.meta +Fusion3Sprites.mat +Fusion3Sprites.mat.meta +GhostClipping.mat +GhostClipping.mat.meta +Glitch.mat +Glitch.mat.meta +HologramParasite.mat +HologramParasite.mat.meta +HologramParasiteAdditive.mat +HologramParasiteAdditive.mat.meta +HologramParasiteTint.mat +HologramParasiteTint.mat.meta +HologramParasiteTintAdditive.mat +HologramParasiteTintAdditive.mat.meta +HologramScanLine.mat +HologramScanLine.mat.meta +HologramScanLineAdditive.mat +HologramScanLineAdditive.mat.meta +Holographic.mat +Holographic.mat.meta +HolographicTint.mat +HolographicTint.mat.meta +HolographicTintAdditive.mat +HolographicTintAdditive.mat.meta +InfiniteZoom.mat +InfiniteZoom.mat.meta +InnerGlow.mat +InnerGlow.mat.meta +InsideDistortion.mat +InsideDistortion.mat.meta +JpegCompressionStyle.mat +JpegCompressionStyle.mat.meta +Kaleidoscope.mat +Kaleidoscope.mat.meta +Lerp2sprites.mat +Lerp2sprites.mat.meta +LightGlow.mat +LightGlow.mat.meta +LiquidWave.mat +LiquidWave.mat.meta +MotionBlurFast.mat +MotionBlurFast.mat.meta +NightVision.mat +NightVision.mat.meta +NoiseBlur_Horizontal.mat +NoiseBlur_Horizontal.mat.meta +NoiseBlur_Vertical.mat +NoiseBlur_Vertical.mat.meta +Offset.mat +Offset.mat.meta +Outline.mat +Outline.mat.meta +OutlineEmpty.mat +OutlineEmpty.mat.meta +Perspective3D.mat +Perspective3D.mat.meta +Pinch.mat +Pinch.mat.meta +PixelExplosion.mat +PixelExplosion.mat.meta +PixelGravityDie.mat +PixelGravityDie.mat.meta +Pixelisation.mat +Pixelisation.mat.meta +PixelisationXY.mat +PixelisationXY.mat.meta +Plasma.mat +Plasma.mat.meta +Repeat.mat +Repeat.mat.meta +RetroC64.mat +RetroC64.mat.meta +RetroCGA.mat +RetroCGA.mat.meta +RetroCGA2.mat +RetroCGA2.mat.meta +RetroEGA.mat +RetroEGA.mat.meta +RetroGB.mat +RetroGB.mat.meta +RoarDistortion.mat +RoarDistortion.mat.meta +Shake.mat +Shake.mat.meta +Sharpness.mat +Sharpness.mat.meta +ShinyFX.mat +ShinyFX.mat.meta +ShinyPixel.mat +ShinyPixel.mat.meta +SymbioseDistortion.mat +SymbioseDistortion.mat.meta +SymbioseDistortionFix.mat +SymbioseDistortionFix.mat.meta +Threshold.mat +Threshold.mat.meta +ThresholdSmooth.mat +ThresholdSmooth.mat.meta +Tilt_Down.mat +Tilt_Down.mat.meta +Tilt_Left.mat +Tilt_Left.mat.meta +Tilt_Right.mat +Tilt_Right.mat.meta +TurnFire.mat +TurnFire.mat.meta +TurnFirePixel.mat +TurnFirePixel.mat.meta +TurnGold.mat +TurnGold.mat.meta +TurnLiquid.mat +TurnLiquid.mat.meta +TurnMetal.mat +TurnMetal.mat.meta +TurnToInfinite.mat +TurnToInfinite.mat.meta +TurnTransparent.mat +TurnTransparent.mat.meta +Twist.mat +Twist.mat.meta +txt.txt +Vintage.mat +Vintage.mat.meta +Zoom.mat +Zoom.mat.meta diff --git a/Assets/2DxFX/ExtraShaders/Material/txt.txt.meta b/Assets/2DxFX/ExtraShaders/Material/txt.txt.meta new file mode 100644 index 00000000..eba8cd26 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Material/txt.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2960227ec1315a94cb0c148e3fd2aa15 +timeCreated: 1540994111 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader.meta b/Assets/2DxFX/ExtraShaders/Shader.meta new file mode 100644 index 00000000..191a46b3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4bdf663f2e0271240a4eebbe91fcd825 +folderAsset: yes +timeCreated: 1530884290 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Additive.shader b/Assets/2DxFX/ExtraShaders/Shader/Additive.shader new file mode 100644 index 00000000..fa988686 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Additive.shader @@ -0,0 +1,86 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Additive" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Additive.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Additive.shader.meta new file mode 100644 index 00000000..4d15a330 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Additive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7aada9f885f287a4b86a05061f0dcaba +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/AlphaIntensity.shader b/Assets/2DxFX/ExtraShaders/Shader/AlphaIntensity.shader new file mode 100644 index 00000000..258a0de0 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/AlphaIntensity.shader @@ -0,0 +1,99 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/AlphaIntensity" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_AlphaIntensity_Fade_1("_AlphaIntensity_Fade_1", Range(0, 6)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _AlphaIntensity_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + + +float4 AlphaIntensity(float4 txt,float fade) +{ +if (txt.a < 1) txt.a = txt.a*fade; +return txt; +} + +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 AlphaIntensity_1 = AlphaIntensity(_MainTex_1,_AlphaIntensity_Fade_1); +float4 FinalResult = AlphaIntensity_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/AlphaIntensity.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/AlphaIntensity.shader.meta new file mode 100644 index 00000000..2134ea01 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/AlphaIntensity.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 62b10ab342d7f4e42843245f67441ef2 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/AnimatedBurn.shader b/Assets/2DxFX/ExtraShaders/Shader/AnimatedBurn.shader new file mode 100644 index 00000000..e60f2be5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/AnimatedBurn.shader @@ -0,0 +1,107 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/AnimatedBurn" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_AnimatedBurn_Offset("_AnimatedBurn_Offset", Range(-1, 1)) =0 +_AnimatedBurn_Fade("_AnimatedBurn_Fade", Range(0, 1)) =1 +_AnimatedBurn_Speed("_AnimatedBurn_Speed", Range(-2, 2)) =0.465 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _AnimatedBurn_Offset; +float _AnimatedBurn_Fade; +float _AnimatedBurn_Speed; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Color_PreGradients(float4 rgba, float4 a, float4 b, float4 c, float4 d, float offset, float fade, float speed) +{ +float gray = (rgba.r + rgba.g + rgba.b) / 3; +gray += offset+(speed*_Time*20); +float4 result = a + b * cos(6.28318 * (c * gray + d)); +result.a = rgba.a; +result.rgb = lerp(rgba.rgb, result.rgb, fade); +return result; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _PremadeGradients_1 = Color_PreGradients(_MainTex_1,float4(1,0,0.13,1),float4(0.42,0.95,0,1),float4(0.99,0.68,0.99,1),float4(0.39,0.39,1,1),_AnimatedBurn_Offset,_AnimatedBurn_Fade,_AnimatedBurn_Speed); +float4 FinalResult = _PremadeGradients_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/AnimatedBurn.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/AnimatedBurn.shader.meta new file mode 100644 index 00000000..4b1f49b5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/AnimatedBurn.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e5954c7b8917881499950daad7684e70 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Movement.shader b/Assets/2DxFX/ExtraShaders/Shader/Animated_Movement.shader new file mode 100644 index 00000000..4d25a563 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Movement.shader @@ -0,0 +1,106 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Animated_Movement" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +AnimatedMouvementUV_X_1("AnimatedMouvementUV_X_1", Range(-1, 1)) = 0.268 +AnimatedMouvementUV_Y_1("AnimatedMouvementUV_Y_1", Range(-1, 1)) = 0.554 +AnimatedMouvementUV_Speed_1("AnimatedMouvementUV_Speed_1", Range(-1, 1)) = 0.239 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float AnimatedMouvementUV_X_1; +float AnimatedMouvementUV_Y_1; +float AnimatedMouvementUV_Speed_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedMouvementUV(float2 uv, float offsetx, float offsety, float speed) +{ +speed *=_Time*50; +uv += float2(offsetx, offsety)*speed; +uv = fmod(uv,1); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedMouvementUV_1 = AnimatedMouvementUV(i.texcoord,AnimatedMouvementUV_X_1,AnimatedMouvementUV_Y_1,AnimatedMouvementUV_Speed_1); +i.texcoord = lerp(i.texcoord,AnimatedMouvementUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Movement.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Animated_Movement.shader.meta new file mode 100644 index 00000000..bc5724a1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Movement.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 732ccbd3533016342a54d2b6932547f3 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Offset.shader b/Assets/2DxFX/ExtraShaders/Shader/Animated_Offset.shader new file mode 100644 index 00000000..f48495a5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Offset.shader @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Animated_Offset" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +AnimatedOffsetUV_X_1("AnimatedOffsetUV_X_1", Range(-1, 1)) = 0.211 +AnimatedOffsetUV_Y_1("AnimatedOffsetUV_Y_1", Range(-1, 1)) = 0.211 +AnimatedOffsetUV_ZoomX_1("AnimatedOffsetUV_ZoomX_1", Range(1, 10)) = 2.205 +AnimatedOffsetUV_ZoomY_1("AnimatedOffsetUV_ZoomY_1", Range(1, 10)) = 2.591 +AnimatedOffsetUV_Speed_1("AnimatedOffsetUV_Speed_1", Range(-1, 1)) = 0.1 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float AnimatedOffsetUV_X_1; +float AnimatedOffsetUV_Y_1; +float AnimatedOffsetUV_ZoomX_1; +float AnimatedOffsetUV_ZoomY_1; +float AnimatedOffsetUV_Speed_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedOffsetUV(float2 uv, float offsetx, float offsety, float zoomx, float zoomy, float speed) +{ +speed *=_Time*25; +uv += float2(offsetx*speed, offsety*speed); +uv = fmod(uv * float2(zoomx, zoomy), 1); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedOffsetUV_1 = AnimatedOffsetUV(i.texcoord,AnimatedOffsetUV_X_1,AnimatedOffsetUV_Y_1,AnimatedOffsetUV_ZoomX_1,AnimatedOffsetUV_ZoomY_1,AnimatedOffsetUV_Speed_1); +i.texcoord = lerp(i.texcoord,AnimatedOffsetUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Offset.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Animated_Offset.shader.meta new file mode 100644 index 00000000..fa3341cc --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Offset.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d6ba954a9a452a74b819b3bff7b42416 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong.shader b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong.shader new file mode 100644 index 00000000..ddff0975 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong.shader @@ -0,0 +1,111 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Animated_PingPong" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +AnimatedPingPongOffsetUV_1_OffsetX_1("AnimatedPingPongOffsetUV_1_OffsetX_1", Range(-1, 1)) = 0.182 +AnimatedPingPongOffsetUV_1_OffsetY_1("AnimatedPingPongOffsetUV_1_OffsetY_1", Range(-1, 1)) = 0 +AnimatedPingPongOffsetUV_1_ZoomX_1("AnimatedPingPongOffsetUV_1_ZoomX_1", Range(1, 10)) = 1 +AnimatedPingPongOffsetUV_1_ZoomY_1("AnimatedPingPongOffsetUV_1_ZoomY_1", Range(1, 10)) = 1 +AnimatedPingPongOffsetUV_1_Speed_1("AnimatedPingPongOffsetUV_1_Speed_1", Range(-1, 1)) = 0.354 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float AnimatedPingPongOffsetUV_1_OffsetX_1; +float AnimatedPingPongOffsetUV_1_OffsetY_1; +float AnimatedPingPongOffsetUV_1_ZoomX_1; +float AnimatedPingPongOffsetUV_1_ZoomY_1; +float AnimatedPingPongOffsetUV_1_Speed_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedPingPongOffsetUV(float2 uv, float offsetx, float offsety, float zoomx, float zoomy, float speed) +{ +float time = sin(_Time * 100* speed) * 0.1; +speed *= time * 25; +uv += float2(offsetx, offsety)*speed; +uv = uv * float2(zoomx, zoomy); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedPingPongOffsetUV_1 = AnimatedPingPongOffsetUV(i.texcoord,AnimatedPingPongOffsetUV_1_OffsetX_1,AnimatedPingPongOffsetUV_1_OffsetY_1,AnimatedPingPongOffsetUV_1_ZoomX_1,AnimatedPingPongOffsetUV_1_ZoomY_1,AnimatedPingPongOffsetUV_1_Speed_1); +i.texcoord = lerp(i.texcoord,AnimatedPingPongOffsetUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong.shader.meta new file mode 100644 index 00000000..0395be15 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2cb23d52eadf31143937de4926889b62 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong_Rotation.shader b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong_Rotation.shader new file mode 100644 index 00000000..379fbe66 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong_Rotation.shader @@ -0,0 +1,114 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Animated_PingPong_Rotation" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +AnimatedRotationUV_AnimatedRotationUV_Rotation_1("AnimatedRotationUV_AnimatedRotationUV_Rotation_1", Range(-360, 360)) = -16.715 +AnimatedRotationUV_AnimatedRotationUV_PosX_1("AnimatedRotationUV_AnimatedRotationUV_PosX_1", Range(-1, 2)) = 0.5 +AnimatedRotationUV_AnimatedRotationUV_PosY_1("AnimatedRotationUV_AnimatedRotationUV_PosY_1", Range(-1, 2)) = 0.5 +AnimatedRotationUV_AnimatedRotationUV_Intensity_1("AnimatedRotationUV_AnimatedRotationUV_Intensity_1", Range(0, 4)) = 0.5 +AnimatedRotationUV_AnimatedRotationUV_Speed_1("AnimatedRotationUV_AnimatedRotationUV_Speed_1", Range(-10, 10)) = 4.107 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float AnimatedRotationUV_AnimatedRotationUV_Rotation_1; +float AnimatedRotationUV_AnimatedRotationUV_PosX_1; +float AnimatedRotationUV_AnimatedRotationUV_PosY_1; +float AnimatedRotationUV_AnimatedRotationUV_Intensity_1; +float AnimatedRotationUV_AnimatedRotationUV_Speed_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedRotationUV(float2 uv, float rot, float posx, float posy, float radius, float speed) +{ +uv = uv - float2(posx, posy); +float angle = rot * 0.01744444; +angle += sin(_Time * speed * 20) * radius; +float sinX = sin(angle); +float cosX = cos(angle); +float2x2 rotationMatrix = float2x2(cosX, -sinX, sinX, cosX); +uv = mul(uv, rotationMatrix) + float2(posx, posy); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedRotationUV_1 = AnimatedRotationUV(i.texcoord,AnimatedRotationUV_AnimatedRotationUV_Rotation_1,AnimatedRotationUV_AnimatedRotationUV_PosX_1,AnimatedRotationUV_AnimatedRotationUV_PosY_1,AnimatedRotationUV_AnimatedRotationUV_Intensity_1,AnimatedRotationUV_AnimatedRotationUV_Speed_1); +i.texcoord = lerp(i.texcoord,AnimatedRotationUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong_Rotation.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong_Rotation.shader.meta new file mode 100644 index 00000000..550de5f8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_PingPong_Rotation.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 096479cd77bd29a428c2c1be62b9fff1 +timeCreated: 1542019633 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Twist.shader b/Assets/2DxFX/ExtraShaders/Shader/Animated_Twist.shader new file mode 100644 index 00000000..ad532a41 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Twist.shader @@ -0,0 +1,119 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Animated_Twist" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +AnimatedTwistUV_AnimatedTwistUV_Bend_1("AnimatedTwistUV_AnimatedTwistUV_Bend_1", Range(-1, 1)) = 0.354 +AnimatedTwistUV_AnimatedTwistUV_PosX_1("AnimatedTwistUV_AnimatedTwistUV_PosX_1", Range(-1, 2)) = 0.5 +AnimatedTwistUV_AnimatedTwistUV_PosY_1("AnimatedTwistUV_AnimatedTwistUV_PosY_1", Range(-1, 2)) = 0.5 +AnimatedTwistUV_AnimatedTwistUV_Radius_1("AnimatedTwistUV_AnimatedTwistUV_Radius_1", Range(0, 1)) = 0.5 +AnimatedTwistUV_AnimatedTwistUV_Speed_1("AnimatedTwistUV_AnimatedTwistUV_Speed_1", Range(-10, 10)) = 2.679 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float AnimatedTwistUV_AnimatedTwistUV_Bend_1; +float AnimatedTwistUV_AnimatedTwistUV_PosX_1; +float AnimatedTwistUV_AnimatedTwistUV_PosY_1; +float AnimatedTwistUV_AnimatedTwistUV_Radius_1; +float AnimatedTwistUV_AnimatedTwistUV_Speed_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedTwistUV(float2 uv, float value, float posx, float posy, float radius, float speed) +{ +float2 center = float2(posx, posy); +float2 tc = uv - center; +float dist = length(tc); +if (dist < radius) +{ +float percent = (radius - dist) / radius; +float theta = percent * percent * 16.0 * sin(value); +float s = sin(theta + _Time.y * speed); +float c = cos(theta + _Time.y * speed); +tc = float2(dot(tc, float2(c, -s)), dot(tc, float2(s, c))); +} +tc += center; +return tc; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedTwistUV_1 = AnimatedTwistUV(i.texcoord,AnimatedTwistUV_AnimatedTwistUV_Bend_1,AnimatedTwistUV_AnimatedTwistUV_PosX_1,AnimatedTwistUV_AnimatedTwistUV_PosY_1,AnimatedTwistUV_AnimatedTwistUV_Radius_1,AnimatedTwistUV_AnimatedTwistUV_Speed_1); +i.texcoord = lerp(i.texcoord,AnimatedTwistUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Twist.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Animated_Twist.shader.meta new file mode 100644 index 00000000..9b900ad7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Twist.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ba230345268343c4882d33f4be411c79 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Zoom.shader b/Assets/2DxFX/ExtraShaders/Shader/Animated_Zoom.shader new file mode 100644 index 00000000..ce983c04 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Zoom.shader @@ -0,0 +1,114 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Animated_Zoom" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +AnimatedZoomUV_AnimatedZoomUV_Zoom_1("AnimatedZoomUV_AnimatedZoomUV_Zoom_1", Range(0.2, 4)) = 1 +AnimatedZoomUV_AnimatedZoomUV_PosX_1("AnimatedZoomUV_AnimatedZoomUV_PosX_1", Range(-1, 2)) = 0.5 +AnimatedZoomUV_AnimatedZoomUV_PosY_1("AnimatedZoomUV_AnimatedZoomUV_PosY_1", Range(-1, 2)) = 0.5 +AnimatedZoomUV_AnimatedZoomUV_Intensity_1("AnimatedZoomUV_AnimatedZoomUV_Intensity_1", Range(0, 4)) = 0.5 +AnimatedZoomUV_AnimatedZoomUV_Speed_1("AnimatedZoomUV_AnimatedZoomUV_Speed_1", Range(-10, 10)) = 6.393 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float AnimatedZoomUV_AnimatedZoomUV_Zoom_1; +float AnimatedZoomUV_AnimatedZoomUV_PosX_1; +float AnimatedZoomUV_AnimatedZoomUV_PosY_1; +float AnimatedZoomUV_AnimatedZoomUV_Intensity_1; +float AnimatedZoomUV_AnimatedZoomUV_Speed_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedZoomUV(float2 uv, float zoom, float posx, float posy, float radius, float speed) +{ +float2 center = float2(posx, posy); +uv -= center; +zoom -= radius * 0.1; +zoom += sin(_Time * speed * 20) * 0.1 * radius; +uv = uv * zoom; +uv += center; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedZoomUV_1 = AnimatedZoomUV(i.texcoord,AnimatedZoomUV_AnimatedZoomUV_Zoom_1,AnimatedZoomUV_AnimatedZoomUV_PosX_1,AnimatedZoomUV_AnimatedZoomUV_PosY_1,AnimatedZoomUV_AnimatedZoomUV_Intensity_1,AnimatedZoomUV_AnimatedZoomUV_Speed_1); +AnimatedZoomUV_1 = saturate(AnimatedZoomUV_1); +i.texcoord = lerp(i.texcoord,AnimatedZoomUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Animated_Zoom.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Animated_Zoom.shader.meta new file mode 100644 index 00000000..02ad7b49 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Animated_Zoom.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a924feaf7456a584896c68aaea2a0806 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Automatic2spritesLerp.shader b/Assets/2DxFX/ExtraShaders/Shader/Automatic2spritesLerp.shader new file mode 100644 index 00000000..c14c5ca9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Automatic2spritesLerp.shader @@ -0,0 +1,98 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Automatic2spritesLerp" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_NewTex_1("NewTex_1(RGB)", 2D) = "white" { } +_AutomaticLerp_Speed_1("_AutomaticLerp_Speed_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +sampler2D _NewTex_1; +float _AutomaticLerp_Speed_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 NewTex_1 = tex2D(_NewTex_1, i.texcoord); +float _AutomaticLerp_Fade_1 = (1 + cos(_Time.y * 4 * _AutomaticLerp_Speed_1)) / 2; +_MainTex_1.rgb = lerp(_MainTex_1.rgb, NewTex_1.rgb, 1-_MainTex_1.a); +NewTex_1.rgb = lerp(_MainTex_1.rgb, NewTex_1.rgb, NewTex_1.a); +_MainTex_1 = lerp(_MainTex_1, NewTex_1, _AutomaticLerp_Fade_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Automatic2spritesLerp.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Automatic2spritesLerp.shader.meta new file mode 100644 index 00000000..ad5fe763 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Automatic2spritesLerp.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3cdf2c4a762ad3a4eb0b55de184d304e +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Blur.shader b/Assets/2DxFX/ExtraShaders/Shader/Blur.shader new file mode 100644 index 00000000..60776cd0 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Blur.shader @@ -0,0 +1,109 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Blur" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Blur_Intensity_1("_Blur_Intensity_1", Range(1, 16)) = 1.914 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Blur_Intensity_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Blur(float2 uv, sampler2D source, float Intensity) +{ +float stepU = 0.00390625f * Intensity; +float stepV = stepU; +float4 result = float4 (0, 0, 0, 0); +float2 texCoord = float2(0, 0); +texCoord = uv + float2(-stepU, -stepV); result += tex2D(source, texCoord); +texCoord = uv + float2(-stepU, 0); result += 2.0 * tex2D(source, texCoord); +texCoord = uv + float2(-stepU, stepV); result += tex2D(source, texCoord); +texCoord = uv + float2(0, -stepV); result += 2.0 * tex2D(source, texCoord); +texCoord = uv; result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(0, stepV); result += 2.0 * tex2D(source, texCoord); +texCoord = uv + float2(stepU, -stepV); result += tex2D(source, texCoord); +texCoord = uv + float2(stepU, 0); result += 2.0* tex2D(source, texCoord); +texCoord = uv + float2(stepU, -stepV); result += tex2D(source, texCoord); +result = result * 0.0625; +return result; +} +float4 frag (v2f i) : COLOR +{ +float4 _Blur_1 = Blur(i.texcoord,_MainTex,_Blur_Intensity_1); +float4 FinalResult = _Blur_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Blur.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Blur.shader.meta new file mode 100644 index 00000000..7a2c59b5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Blur.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e0dc2cbfb220a4d468fe85ca66bc4d72 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/BlurHQ.shader b/Assets/2DxFX/ExtraShaders/Shader/BlurHQ.shader new file mode 100644 index 00000000..3bc6d0d7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BlurHQ.shader @@ -0,0 +1,125 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/BlurHQ" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_BlurHQ_Intensity_1("_BlurHQ_Intensity_1", Range(1, 16)) = 5.914 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _BlurHQ_Intensity_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 BlurHQ(float2 uv, sampler2D source, float Intensity) +{ +float step1 = 0.00390625f * Intensity * 0.5; +float step2 = step1 * 2; +float4 result = float4 (0, 0, 0, 0); +float2 texCoord = float2(0, 0); +texCoord = uv + float2(-step2, -step2); result += tex2D(source, texCoord); +texCoord = uv + float2(-step1, -step2); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(0, -step2); result += 6.0 * tex2D(source, texCoord); +texCoord = uv + float2(step1, -step2); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(step2, -step2); result += tex2D(source, texCoord); +texCoord = uv + float2(-step2, -step1); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(-step1, -step1); result += 16.0 * tex2D(source, texCoord); +texCoord = uv + float2(0, -step1); result += 24.0 * tex2D(source, texCoord); +texCoord = uv + float2(step1, -step1); result += 16.0 * tex2D(source, texCoord); +texCoord = uv + float2(step2, -step1); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(-step2, 0); result += 6.0 * tex2D(source, texCoord); +texCoord = uv + float2(-step1, 0); result += 24.0 * tex2D(source, texCoord); +texCoord = uv; result += 36.0 * tex2D(source, texCoord); +texCoord = uv + float2(step1, 0); result += 24.0 * tex2D(source, texCoord); +texCoord = uv + float2(step2, 0); result += 6.0 * tex2D(source, texCoord); +texCoord = uv + float2(-step2, step1); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(-step1, step1); result += 16.0 * tex2D(source, texCoord); +texCoord = uv + float2(0, step1); result += 24.0 * tex2D(source, texCoord); +texCoord = uv + float2(step1, step1); result += 16.0 * tex2D(source, texCoord); +texCoord = uv + float2(step2, step1); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(-step2, step2); result += tex2D(source, texCoord); +texCoord = uv + float2(-step1, step2); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(0, step2); result += 6.0 * tex2D(source, texCoord); +texCoord = uv + float2(step1, step2); result += 4.0 * tex2D(source, texCoord); +texCoord = uv + float2(step2, step2); result += tex2D(source, texCoord); +result = result*0.00390625; +return result; +} +float4 frag (v2f i) : COLOR +{ +float4 _BlurHQ_1 = BlurHQ(i.texcoord,_MainTex,_BlurHQ_Intensity_1); +float4 FinalResult = _BlurHQ_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/BlurHQ.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/BlurHQ.shader.meta new file mode 100644 index 00000000..ed555eef --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BlurHQ.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1b7e03285e1d48643acc2d60343f35ca +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/BlurHQPlus.shader b/Assets/2DxFX/ExtraShaders/Shader/BlurHQPlus.shader new file mode 100644 index 00000000..32536df6 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BlurHQPlus.shader @@ -0,0 +1,119 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/BlurHQPlus" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_BlurHQPlus_Intensity_1("_BlurHQPlus_Intensity_1", Range(1, 64)) = 7.114 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _BlurHQPlus_Intensity_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float BlurHQ_Plus_G(float bhqp, float x) +{ +return exp(-(x * x) / (2.0 * bhqp * bhqp)); +} + +float4 BlurHQ_Plus(float2 uv, sampler2D source, float Intensity) +{ +int c_samples = 16; +int c_halfSamples = c_samples / 2; +float c_pixelSize = 0.00390625; +float c_sigmaX = 0.1 + Intensity *0.5; +float c_sigmaY = c_sigmaX; +float total = 0.0; +float4 ret = float4(0, 0, 0, 0); +for (int iy = 0; iy < c_samples; ++iy) +{ +float fy = BlurHQ_Plus_G(c_sigmaY, float(iy) - float(c_halfSamples)); +float offsety = float(iy - c_halfSamples) * c_pixelSize; +for (int ix = 0; ix < c_samples; ++ix) +{ +float fx = BlurHQ_Plus_G(c_sigmaX, float(ix) - float(c_halfSamples)); +float offsetx = float(ix - c_halfSamples) * c_pixelSize; +total += fx * fy; +ret += tex2D(source, uv + float2(offsetx, offsety)) * fx*fy; +} +} +return ret / total; +} +float4 frag (v2f i) : COLOR +{ +float4 _BlurHQPlus_1 = BlurHQ_Plus(i.texcoord,_MainTex,_BlurHQPlus_Intensity_1); +float4 FinalResult = _BlurHQPlus_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/BlurHQPlus.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/BlurHQPlus.shader.meta new file mode 100644 index 00000000..9aa5f280 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BlurHQPlus.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c648834c94de01d4682911dfc23d9925 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/BreakingGlass.shader b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlass.shader new file mode 100644 index 00000000..384f7471 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlass.shader @@ -0,0 +1,134 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/BreakingGlass" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Break_Size("Break_Size", Range(0, 128)) = 5.714 +Break_Seed("Break_Seed", Range(1, 2)) = 1.322 +Break_Value("Break_Value", Range(-0.3, 0.3)) = -0.139 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Break_Size; +float Break_Seed; +float Break_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float3 Generate_Voronoi_hash3(float2 p, float seed) +{ +float3 q = float3(dot(p, float2(127.1, 311.7)), +dot(p, float2(269.5, 183.3)), +dot(p, float2(419.2, 371.9))); +return frac(sin(q) * 43758.5453 * seed); +} +float4 Generate_Voronoi(float2 uv, float size,float seed, float black) +{ +float2 p = floor(uv*size); +float2 f = frac(uv*size); +float k = 1.0 + 63.0*pow(1.0, 4.0); +float va = 0.0; +float wt = 0.0; +for (int j = -2; j <= 2; j++) +{ +for (int i = -2; i <= 2; i++) +{ +float2 g = float2(float(i), float(j)); +float3 o = Generate_Voronoi_hash3(p + g, seed)*float3(1.0, 1.0, 1.0); +float2 r = g - f + o.xy; +float d = dot(r, r); +float ww = pow(1.0 - smoothstep(0.0, 1.414, sqrt(d)), k); +va += o.z*ww; +wt += ww; +} +} +float4 result = saturate(va / wt); +result.a = saturate(result.a + black); +return result; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Voronoi_1 = Generate_Voronoi(i.texcoord,Break_Size,Break_Seed,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,0,_Generate_Voronoi_1.g*_Generate_Voronoi_1.a,Break_Value); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/BreakingGlass.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlass.shader.meta new file mode 100644 index 00000000..957f6d14 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlass.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e7d6abf4ea541648b78a2f8dfdefac9 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/BreakingGlassFull.shader b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlassFull.shader new file mode 100644 index 00000000..a1476b2a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlassFull.shader @@ -0,0 +1,141 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/BreakingGlassFull" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Glass_Size("Glass_Size", Range(0, 128)) = 35.727 +Glass_Seed("Glass_Seed", Range(1, 2)) = 1 +Glass_Displacement("Glass_Displacement", Range(-0.3, 0.3)) = 0.3 +Glass_Rotation("Glass_Rotation", Range(-1, 1)) = -0.378 +Effect_Fading("Effect_Fading", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Glass_Size; +float Glass_Seed; +float Glass_Displacement; +float Glass_Rotation; +float Effect_Fading; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float3 Generate_Voronoi_hash3(float2 p, float seed) +{ +float3 q = float3(dot(p, float2(127.1, 311.7)), +dot(p, float2(269.5, 183.3)), +dot(p, float2(419.2, 371.9))); +return frac(sin(q) * 43758.5453 * seed); +} +float4 Generate_Voronoi(float2 uv, float size,float seed, float black) +{ +float2 p = floor(uv*size); +float2 f = frac(uv*size); +float k = 1.0 + 63.0*pow(1.0, 4.0); +float va = 0.0; +float wt = 0.0; +for (int j = -2; j <= 2; j++) +{ +for (int i = -2; i <= 2; i++) +{ +float2 g = float2(float(i), float(j)); +float3 o = Generate_Voronoi_hash3(p + g, seed)*float3(1.0, 1.0, 1.0); +float2 r = g - f + o.xy; +float d = dot(r, r); +float ww = pow(1.0 - smoothstep(0.0, 1.414, sqrt(d)), k); +va += o.z*ww; +wt += ww; +} +} +float4 result = saturate(va / wt); +result.a = saturate(result.a + black); +return result; +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Voronoi_1 = Generate_Voronoi(i.texcoord,Glass_Size,Glass_Seed,0); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Generate_Voronoi_1,Glass_Displacement,Glass_Rotation); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Effect_Fading); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/BreakingGlassFull.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlassFull.shader.meta new file mode 100644 index 00000000..1891dc82 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BreakingGlassFull.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6ecaaad0f85fdb444aca09447fd8d6d8 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/BreakingMirror.shader b/Assets/2DxFX/ExtraShaders/Shader/BreakingMirror.shader new file mode 100644 index 00000000..80e7e7f7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BreakingMirror.shader @@ -0,0 +1,114 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/BreakingMirror" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 +Displacement_Value("Displacement_Value", Range(-0.3, 0.3)) = 0.022 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma multi_compile _ PIXELSNAP_ON +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Displacement_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Generate_Xray(float2 uv, float posx, float posy, float number, float speed, float black) +{ +uv -= float2(posx,posy); +float dist = 1.; +float a1 = atan2(uv.y,uv.x) + 3.14; +a1 = a1 / 6.28; +a1+=_Time * speed; +a1 = abs(a1); +if (fmod(a1 * number, 2.0) < 1) dist = 0.; +float4 result = float4(1,1,1,dist); +if (black == 1) result = float4(dist, dist, dist, 1); +return result; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Xray_1 = Generate_Xray(i.texcoord,0.5,0.5,16,2.429,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,_Generate_Xray_1.r*_Generate_Xray_1.a,0,Displacement_Value); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/BreakingMirror.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/BreakingMirror.shader.meta new file mode 100644 index 00000000..ce676950 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BreakingMirror.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 32f985def6d7fc3429e8d5364cadba4f +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Burn.shader b/Assets/2DxFX/ExtraShaders/Shader/Burn.shader new file mode 100644 index 00000000..5ee1e5c3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Burn.shader @@ -0,0 +1,124 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Burn" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Destroyer_Value_1("_Destroyer_Value_1", Range(0, 1)) = 0 +_Destroyer_Speed_1("_Destroyer_Speed_1", Range(0, 1)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Destroyer_Value_1; +float _Destroyer_Speed_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float DSFXr (float2 c, float seed) +{ +return frac(43.*sin(c.x+7.*c.y)*seed); +} + +float DSFXn (float2 p, float seed) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(DSFXr(i, seed), DSFXr(i+j, seed), w.x), lerp(DSFXr(i+j.yx, seed), DSFXr(i+1., seed), w.x), w.y); +} + +float DSFXa (float2 p, float seed) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += DSFXn(f*p, seed)/f; f+=f; } +return m; +} + +float4 DestroyerFX(float4 txt, float2 uv, float value, float seed, float HDR) +{ +float t = frac(value*0.9999); +float4 c = smoothstep(t / 1.2, t + .1, DSFXa(3.5*uv, seed)); +c = txt*c; +c.r = lerp(c.r, c.r*120.0*(1 - c.a), value); +c.g = lerp(c.g, c.g*40.0*(1 - c.a), value); +c.b = lerp(c.b, c.b*5.0*(1 - c.a) , value); +c.rgb = lerp(saturate(c.rgb),c.rgb,HDR); +return c; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _Destroyer_1 = DestroyerFX(_MainTex_1,i.texcoord,_Destroyer_Value_1,_Destroyer_Speed_1,1.); +float4 FinalResult = _Destroyer_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Burn.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Burn.shader.meta new file mode 100644 index 00000000..7aa41654 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Burn.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f2cb24ff3cebf6b459d16d0d31230074 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/BurnPixel.shader b/Assets/2DxFX/ExtraShaders/Shader/BurnPixel.shader new file mode 100644 index 00000000..564a5f19 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BurnPixel.shader @@ -0,0 +1,134 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/BurnPixel" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Burn_Pixel_Size("Burn_Pixel_Size", Range(1, 128)) = 19 +Burn_Value("Burn_Value", Range(0, 1)) = 0.384 +Burn_Seed("Burn_Seed", Range(0, 1)) = 0.482 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Burn_Pixel_Size; +float Burn_Value; +float Burn_Seed; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float DSFXr (float2 c, float seed) +{ +return frac(43.*sin(c.x+7.*c.y)*seed); +} + +float DSFXn (float2 p, float seed) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(DSFXr(i, seed), DSFXr(i+j, seed), w.x), lerp(DSFXr(i+j.yx, seed), DSFXr(i+1., seed), w.x), w.y); +} + +float DSFXa (float2 p, float seed) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += DSFXn(f*p, seed)/f; f+=f; } +return m; +} + +float4 DestroyerFX(float4 txt, float2 uv, float value, float seed, float HDR) +{ +float t = frac(value*0.9999); +float4 c = smoothstep(t / 1.2, t + .1, DSFXa(3.5*uv, seed)); +c = txt*c; +c.r = lerp(c.r, c.r*120.0*(1 - c.a), value); +c.g = lerp(c.g, c.g*40.0*(1 - c.a), value); +c.b = lerp(c.b, c.b*5.0*(1 - c.a) , value); +c.rgb = lerp(saturate(c.rgb),c.rgb,HDR); +return c; +} +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,Burn_Pixel_Size); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _Destroyer_1 = DestroyerFX(_MainTex_1,PixelUV_1,Burn_Value,Burn_Seed,1); +float4 FinalResult = _Destroyer_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/BurnPixel.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/BurnPixel.shader.meta new file mode 100644 index 00000000..285a3ee3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/BurnPixel.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 66bad022b169cdd4dba9332bb9ed02a0 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/CircleFade.shader b/Assets/2DxFX/ExtraShaders/Shader/CircleFade.shader new file mode 100644 index 00000000..973b81db --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/CircleFade.shader @@ -0,0 +1,105 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/CircleFade" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_CircleFade_PosX_1("_CircleFade_PosX_1", Range(-1, 2)) = 0.559 +_CircleFade_PosY_1("_CircleFade_PosY_1", Range(-1, 2)) = 0.5 +_CircleFade_Size_1("_CircleFade_Size_1", Range(-1, 1)) = 0.139 +_CircleFade_Dist_1("_CircleFade_Dist_1", Range(0, 1)) = 0.2 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _CircleFade_PosX_1; +float _CircleFade_PosY_1; +float _CircleFade_Size_1; +float _CircleFade_Dist_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Circle_Fade(float4 txt, float2 uv, float posX, float posY, float Size, float Smooth) +{ +float2 center = float2(posX, posY); +float dist = 1.0 - smoothstep(Size, Size + Smooth, length(center - uv)); +txt.a *= dist; +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _CircleFade_1 = Circle_Fade(_MainTex_1,i.texcoord,_CircleFade_PosX_1,_CircleFade_PosY_1,_CircleFade_Size_1,_CircleFade_Dist_1); +float4 FinalResult = _CircleFade_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/CircleFade.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/CircleFade.shader.meta new file mode 100644 index 00000000..a7f6d394 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/CircleFade.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b5538be3e255d204e9584e21a04cbd6e +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/CircleHole.shader b/Assets/2DxFX/ExtraShaders/Shader/CircleHole.shader new file mode 100644 index 00000000..3a350d60 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/CircleHole.shader @@ -0,0 +1,105 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/CircleHole" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_CircleHole_PosX_1("_CircleHole_PosX_1", Range(-1, 2)) = 0.5 +_CircleHole_PosY_1("_CircleHole_PosY_1", Range(-1, 2)) = 0.5 +_CircleHole_Size_1("_CircleHole_Size_1", Range(0, 1)) = 0.675 +_CircleHole_Dist_1("_CircleHole_Dist_1", Range(0, 1)) = 0.2 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _CircleHole_PosX_1; +float _CircleHole_PosY_1; +float _CircleHole_Size_1; +float _CircleHole_Dist_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Circle_Hole(float4 txt, float2 uv, float posX, float posY, float Size, float Smooth) +{ +float2 center = float2(posX, posY); +float dist = 1.0 - smoothstep(Size, Size + Smooth, 1-length(center - uv)); +txt.a *= dist; +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _CircleHole_1 = Circle_Hole(_MainTex_1,i.texcoord,_CircleHole_PosX_1,_CircleHole_PosY_1,_CircleHole_Size_1,_CircleHole_Dist_1); +float4 FinalResult = _CircleHole_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/CircleHole.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/CircleHole.shader.meta new file mode 100644 index 00000000..97e56e29 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/CircleHole.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 57b00ce3c81ac02458df8acc22dff1e0 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorBrightness.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorBrightness.shader new file mode 100644 index 00000000..b8fb328e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorBrightness.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Brightness" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Brightness_Fade_1("_Brightness_Fade_1", Range(0, 1)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Brightness_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Brightness(float4 txt, float value) +{ +txt.rgb += value; +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 Brightness_1 = Brightness(_MainTex_1,_Brightness_Fade_1); +float4 FinalResult = Brightness_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorBrightness.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorBrightness.shader.meta new file mode 100644 index 00000000..a63ba2ab --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorBrightness.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c2c0f221c10a76143b22154fe196523d +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorDarkness.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorDarkness.shader new file mode 100644 index 00000000..5ceddc66 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorDarkness.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorDarkness" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Darkness_Fade_1("_Darkness_Fade_1", Range(0, 1)) = 0.3 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Darkness_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Darkness(float4 txt, float value) +{ +txt.rgb -= value; +return saturate(txt); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 Darkness_1 = Darkness(_MainTex_1,_Darkness_Fade_1); +float4 FinalResult = Darkness_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorDarkness.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorDarkness.shader.meta new file mode 100644 index 00000000..4e6e7890 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorDarkness.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dd705e280a884fc499190318027f767b +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorGrayScale.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorGrayScale.shader new file mode 100644 index 00000000..737d766b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorGrayScale.shader @@ -0,0 +1,99 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorGrayScale" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_GrayScale_Fade_1("_GrayScale_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _GrayScale_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + + +float4 grayscale(float4 txt,float fade) +{ +float3 gs = dot(txt.rgb, float3(0.3, 0.59, 0.11)); +return lerp(txt,float4(gs, txt.a), fade); +} + +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 GrayScale_1 = grayscale(_MainTex_1,_GrayScale_Fade_1); +float4 FinalResult = GrayScale_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorGrayScale.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorGrayScale.shader.meta new file mode 100644 index 00000000..914eea3e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorGrayScale.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 66425f278d72a5141bc3e79c28c7dd8a +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorHDR_Creation.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorHDR_Creation.shader new file mode 100644 index 00000000..d5170808 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorHDR_Creation.shader @@ -0,0 +1,99 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorHDR_Creation" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_HdrCreate_Value_1("_HdrCreate_Value_1", Range(-2, 2)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _HdrCreate_Value_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 HdrCreate(float4 txt,float value) +{ +if (txt.r>0.98) txt.r=2; +if (txt.g>0.98) txt.g=2; +if (txt.b>0.98) txt.b=2; +return lerp(saturate(txt),txt, value); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 HdrCreate_1 = HdrCreate(_MainTex_1,_HdrCreate_Value_1); +float4 FinalResult = HdrCreate_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorHDR_Creation.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorHDR_Creation.shader.meta new file mode 100644 index 00000000..7ceb5412 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorHDR_Creation.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c62721c5c0286ec4ab5d31877c13feb0 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorHSV.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorHSV.shader new file mode 100644 index 00000000..cd19108a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorHSV.shader @@ -0,0 +1,119 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorHSV" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ColorHSV_Hue_1("_ColorHSV_Hue_1", Range(0, 360)) = 180 +_ColorHSV_Saturation_1("_ColorHSV_Saturation_1", Range(0, 2)) = 1 +_ColorHSV_Brightness_1("_ColorHSV_Brightness_1", Range(0, 2)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _ColorHSV_Hue_1; +float _ColorHSV_Saturation_1; +float _ColorHSV_Brightness_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ColorHSV(float4 RGBA, float HueShift, float Sat, float Val) +{ + +float4 RESULT = float4(RGBA); +float a1 = Val*Sat; +float a2 = HueShift*3.14159265 / 180; +float VSU = a1*cos(a2); +float VSW = a1*sin(a2); + +RESULT.x = (.299*Val + .701*VSU + .168*VSW)*RGBA.x ++ (.587*Val - .587*VSU + .330*VSW)*RGBA.y ++ (.114*Val - .114*VSU - .497*VSW)*RGBA.z; + +RESULT.y = (.299*Val - .299*VSU - .328*VSW)*RGBA.x ++ (.587*Val + .413*VSU + .035*VSW)*RGBA.y ++ (.114*Val - .114*VSU + .292*VSW)*RGBA.z; + +RESULT.z = (.299*Val - .3*VSU + 1.25*VSW)*RGBA.x ++ (.587*Val - .588*VSU - 1.05*VSW)*RGBA.y ++ (.114*Val + .886*VSU - .203*VSW)*RGBA.z; + +return RESULT; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _ColorHSV_1 = ColorHSV(_MainTex_1,_ColorHSV_Hue_1,_ColorHSV_Saturation_1,_ColorHSV_Brightness_1); +float4 FinalResult = _ColorHSV_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorHSV.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorHSV.shader.meta new file mode 100644 index 00000000..59a00920 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorHSV.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 697455559ccf1954cb3e9a12079c50f0 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorNegative.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorNegative.shader new file mode 100644 index 00000000..c63175e7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorNegative.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorNegative" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_InverseColor_Fade_1("_InverseColor_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _InverseColor_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 InverseColor(float4 txt, float fade) +{ +float3 gs = 1 - txt.rgb; +return lerp(txt, float4(gs, txt.a), fade); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 InverseColor_1 = InverseColor(_MainTex_1,_InverseColor_Fade_1); +float4 FinalResult = InverseColor_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorNegative.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorNegative.shader.meta new file mode 100644 index 00000000..648a8d70 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorNegative.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0f4ee228c80375042bc9f8b221af8a95 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorOnly.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorOnly.shader new file mode 100644 index 00000000..3bd5a60d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorOnly.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorOnly" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_FillColor_Color_1("_FillColor_Color_1", COLOR) = (0.3814879,1,0.1911765,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float4 _FillColor_Color_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 UniColor(float4 txt, float4 color) +{ +txt.rgb = lerp(txt.rgb,color.rgb,color.a); +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FillColor_1 = UniColor(_MainTex_1,_FillColor_Color_1); +float4 FinalResult = FillColor_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorOnly.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorOnly.shader.meta new file mode 100644 index 00000000..39aafb74 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorOnly.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e4ee43121a1a8ee4fb2e1a3563404c56 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorRGB.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorRGB.shader new file mode 100644 index 00000000..3b92ea2f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorRGB.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorRGB" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ColorRGBA_Color_1("_ColorRGBA_Color_1", COLOR) = (0.09637426,0.1351803,0.6241379,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float4 _ColorRGBA_Color_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ColorRGBA(float4 txt, float4 color) +{ +txt.rgb += color.rgb; +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 ColorRGBA_1 = ColorRGBA(_MainTex_1,_ColorRGBA_Color_1); +float4 FinalResult = ColorRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorRGB.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorRGB.shader.meta new file mode 100644 index 00000000..636afaeb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorRGB.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b772b97be4902f34e8de85d19390240c +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorTint.shader b/Assets/2DxFX/ExtraShaders/Shader/ColorTint.shader new file mode 100644 index 00000000..c68c22c7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorTint.shader @@ -0,0 +1,99 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ColorTint" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TintRGBA_Color_1("_TintRGBA_Color_1", COLOR) = (0.03676468,1,0.3200692,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float4 _TintRGBA_Color_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 TintRGBA(float4 txt, float4 color) +{ +float3 tint = dot(txt.rgb, float3(.222, .707, .071)); +tint.rgb *= color.rgb; +txt.rgb = lerp(txt.rgb,tint.rgb,color.a); +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 TintRGBA_1 = TintRGBA(_MainTex_1,_TintRGBA_Color_1); +float4 FinalResult = TintRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ColorTint.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ColorTint.shader.meta new file mode 100644 index 00000000..d157eaae --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ColorTint.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8b492c924c0d4834d9bbff4cf36d3c50 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/CompressionTintAdditive.shader b/Assets/2DxFX/ExtraShaders/Shader/CompressionTintAdditive.shader new file mode 100644 index 00000000..15f30aad --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/CompressionTintAdditive.shader @@ -0,0 +1,126 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/CompressionTintAdditive" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 +Compression_Value("Compression_Value", Range(1, 16)) = 9.285 +Tint_Color("Tint_Color", COLOR) = (0,0.647059,1,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma multi_compile _ PIXELSNAP_ON +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Compression_Value; +float4 Tint_Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float CMPFXrng2(float2 seed) +{ +return frac(sin(dot(seed * floor(50 + (_Time + 0.1) * 12.), float2(127.1, 311.7))) * 43758.5453123); +} + +float CMPFXrng(float seed) +{ +return CMPFXrng2(float2(seed, 1.0)); +} + +float4 CompressionFX(float2 uv, sampler2D source,float Value) +{ +float2 blockS = floor(uv * float2(24., 19.))*4.0; +float2 blockL = floor(uv * float2(38., 14.))*4.0; +float r = CMPFXrng2(uv); +float lineNoise = pow(CMPFXrng2(blockS), 3.0) *Value* pow(CMPFXrng2(blockL), 3.0); +float4 col1 = tex2D(source, uv + float2(lineNoise * 0.02 * CMPFXrng(2.0), 0)); +float4 result = float4(float3(col1.x, col1.y, col1.z), 1.0); +result.a = col1.a; +return result; +} +float4 TintRGBA(float4 txt, float4 color) +{ +float3 tint = dot(txt.rgb, float3(.222, .707, .071)); +tint.rgb *= color.rgb; +txt.rgb = lerp(txt.rgb,tint.rgb,color.a); +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _CompressionFX_1 = CompressionFX(i.texcoord,_MainTex,Compression_Value); +float4 TintRGBA_1 = TintRGBA(_CompressionFX_1,Tint_Color); +float4 FinalResult = TintRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/CompressionTintAdditive.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/CompressionTintAdditive.shader.meta new file mode 100644 index 00000000..6161b326 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/CompressionTintAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 07a7386bb70f1774eb151d2c6599d90d +timeCreated: 1542019633 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/DesintegrationPixel.shader b/Assets/2DxFX/ExtraShaders/Shader/DesintegrationPixel.shader new file mode 100644 index 00000000..01e4d405 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DesintegrationPixel.shader @@ -0,0 +1,165 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/DesintegrationPixel" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Desintegration_Pixel_Size("Desintegration_Pixel_Size", Range(1, 128)) = 19 +Desintegration_Value("Desintegration_Value", Range(0, 1)) = 0 +Desintegration_Speed("Desintegration_Speed", Range(0, 1)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Desintegration_Pixel_Size; +float Desintegration_Value; +float Desintegration_Speed; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float DGFXr (float2 c, float seed) +{ +return frac(43.*sin(c.x+7.*c.y)*seed); +} + +float DGFXn (float2 p, float seed) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(DGFXr(i, seed), DGFXr(i+j, seed), w.x), lerp(DGFXr(i+j.yx, seed), DGFXr(i+1., seed), w.x), w.y); +} + +float DGFXa (float2 p, float seed) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += DGFXn(f*p, seed)/f; f+=f; } +return m; +} + +float4 DesintegrationFX(float4 txt, float2 uv, float value, float seed) +{ + +float t = frac(value*0.9999); +float4 c = smoothstep(t / 1.2, t + .1, DGFXa(3.5*uv, seed)); +c = txt*c; +c.r = lerp(c.r, c.r*(1 - c.a), value); +c.g = lerp(c.g, c.g*(1 - c.a), value); +c.b = lerp(c.b, c.b*(1 - c.a), value); +return c; +} +float BFXr (float2 c, float seed) +{ +return frac(43.*sin(c.x+7.*c.y)* seed); +} + +float BFXn (float2 p, float seed) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(BFXr(i, seed), BFXr(i+j, seed), w.x), lerp(BFXr(i+j.yx, seed), BFXr(i+1., seed), w.x), w.y); +} + +float BFXa (float2 p, float seed) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += BFXn(f*p, seed)/f; f+=f; } +return m; +} + +float4 BurnFX(float4 txt, float2 uv, float value, float seed, float HDR) +{ +float t = frac(value*0.9999); +float4 c = smoothstep(t / 1.2, t + .1, BFXa(3.5*uv, seed)); +c = txt*c; +c.r = lerp(c.r, c.r*15.0*(1 - c.a), value); +c.g = lerp(c.g, c.g*10.0*(1 - c.a), value); +c.b = lerp(c.b, c.b*5.0*(1 - c.a), value); +c.rgb += txt.rgb*value; +c.rgb = lerp(saturate(c.rgb),c.rgb,HDR); +return c; +} +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,Desintegration_Pixel_Size); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _Desintegration_1 = DesintegrationFX(_MainTex_1,PixelUV_1,Desintegration_Value,Desintegration_Speed); +float4 FinalResult = _Desintegration_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/DesintegrationPixel.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/DesintegrationPixel.shader.meta new file mode 100644 index 00000000..78a64789 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DesintegrationPixel.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 314173c1abe89844c90a5d9523721081 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/DisolveHDR.shader b/Assets/2DxFX/ExtraShaders/Shader/DisolveHDR.shader new file mode 100644 index 00000000..e04e3a9f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DisolveHDR.shader @@ -0,0 +1,127 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/DisolveHDR" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Disolve_Value("Disolve_Value", Range(0, 1)) = 0.509 +Seed("Seed", Range(-8, 8)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Disolve_Value; +float Seed; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float BFXr (float2 c, float seed) +{ +return frac(43.*sin(c.x+7.*c.y)* seed); +} + +float BFXn (float2 p, float seed) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(BFXr(i, seed), BFXr(i+j, seed), w.x), lerp(BFXr(i+j.yx, seed), BFXr(i+1., seed), w.x), w.y); +} + +float BFXa (float2 p, float seed) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += BFXn(f*p, seed)/f; f+=f; } +return m; +} + +float4 BurnFX(float4 txt, float2 uv, float value, float seed, float HDR) +{ +float t = frac(value*0.9999); +float4 c = smoothstep(t / 1.2, t + .1, BFXa(3.5*uv, seed)); +c = txt*c; +c.r = lerp(c.r, c.r*15.0*(1 - c.a), value); +c.g = lerp(c.g, c.g*10.0*(1 - c.a), value); +c.b = lerp(c.b, c.b*5.0*(1 - c.a), value); +c.rgb += txt.rgb*value; +c.rgb = lerp(saturate(c.rgb),c.rgb,HDR); +return c; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _Burn_1 = BurnFX(_MainTex_1,i.texcoord,Disolve_Value,Seed,2); +float4 FinalResult = _Burn_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/DisolveHDR.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/DisolveHDR.shader.meta new file mode 100644 index 00000000..38beb1cb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DisolveHDR.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 54e81659be3b5a140bb76e0f824c103a +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/DisolvePixel.shader b/Assets/2DxFX/ExtraShaders/Shader/DisolvePixel.shader new file mode 100644 index 00000000..66addf41 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DisolvePixel.shader @@ -0,0 +1,135 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/DisolvePixel" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Pixel_Size("Pixel_Size", Range(1, 128)) = 19 +Disolve_Value("Disolve_Value", Range(0, 1)) = 0.402 +Disolve_Seed("Disolve_Seed", Range(-8, 8)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Pixel_Size; +float Disolve_Value; +float Disolve_Seed; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float BFXr (float2 c, float seed) +{ +return frac(43.*sin(c.x+7.*c.y)* seed); +} + +float BFXn (float2 p, float seed) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(BFXr(i, seed), BFXr(i+j, seed), w.x), lerp(BFXr(i+j.yx, seed), BFXr(i+1., seed), w.x), w.y); +} + +float BFXa (float2 p, float seed) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += BFXn(f*p, seed)/f; f+=f; } +return m; +} + +float4 BurnFX(float4 txt, float2 uv, float value, float seed, float HDR) +{ +float t = frac(value*0.9999); +float4 c = smoothstep(t / 1.2, t + .1, BFXa(3.5*uv, seed)); +c = txt*c; +c.r = lerp(c.r, c.r*15.0*(1 - c.a), value); +c.g = lerp(c.g, c.g*10.0*(1 - c.a), value); +c.b = lerp(c.b, c.b*5.0*(1 - c.a), value); +c.rgb += txt.rgb*value; +c.rgb = lerp(saturate(c.rgb),c.rgb,HDR); +return c; +} +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,Pixel_Size); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _Burn_1 = BurnFX(_MainTex_1,PixelUV_1,Disolve_Value,Disolve_Seed,2); +float4 FinalResult = _Burn_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/DisolvePixel.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/DisolvePixel.shader.meta new file mode 100644 index 00000000..babf89e5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DisolvePixel.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 28b943913f85286418f40e0461cf03a4 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Distortion.shader b/Assets/2DxFX/ExtraShaders/Shader/Distortion.shader new file mode 100644 index 00000000..6b502277 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Distortion.shader @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Distortion" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +DistortionUV_WaveX_1("DistortionUV_WaveX_1", Range(0, 128)) = 10 +DistortionUV_WaveY_1("DistortionUV_WaveY_1", Range(0, 128)) = 10 +DistortionUV_DistanceX_1("DistortionUV_DistanceX_1", Range(0, 1)) = 0.3 +DistortionUV_DistanceY_1("DistortionUV_DistanceY_1", Range(0, 1)) = 0.3 +DistortionUV_Speed_1("DistortionUV_Speed_1", Range(-2, 2)) = 1 +_Effect_Fade("_Effect_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float DistortionUV_WaveX_1; +float DistortionUV_WaveY_1; +float DistortionUV_DistanceX_1; +float DistortionUV_DistanceY_1; +float DistortionUV_Speed_1; +float _Effect_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 DistortionUV(float2 p, float WaveX, float WaveY, float DistanceX, float DistanceY, float Speed) +{ +Speed *=_Time*100; +p.x= p.x+sin(p.y*WaveX + Speed)*DistanceX*0.05; +p.y= p.y+cos(p.x*WaveY + Speed)*DistanceY*0.05; +return p; +} +float4 frag (v2f i) : COLOR +{ +float2 DistortionUV_1 = DistortionUV(i.texcoord,DistortionUV_WaveX_1,DistortionUV_WaveY_1,DistortionUV_DistanceX_1,DistortionUV_DistanceY_1,DistortionUV_Speed_1); +i.texcoord = lerp(i.texcoord,DistortionUV_1,_Effect_Fade); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Distortion.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Distortion.shader.meta new file mode 100644 index 00000000..17fe4614 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Distortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6a45e81f0ef5049448404eb9bf175d7e +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/DoodleDraw.shader b/Assets/2DxFX/ExtraShaders/Shader/DoodleDraw.shader new file mode 100644 index 00000000..54485b70 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DoodleDraw.shader @@ -0,0 +1,106 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/DoodleDraw" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +DoodleUV_Size_1("DoodleUV_Size_1", Range(2, 16)) = 7 +DoodleUV_Frame_1("DoodleUV_Frame_1", Range(1, 16)) = 5 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 0.445 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float DoodleUV_Size_1; +float DoodleUV_Frame_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 DoodleUV(float2 p, float Size, float Speed) +{ +float2 co = p; +Speed = (floor(_Time * 20 * Speed) / Speed) * Speed; +co.x = sin((co.x * Size + Speed) * 4); +co.y = cos((co.y * Size + Speed) * 4); +p = lerp(p, p + co, 0.0005 * Size); +return p; +} +float4 frag (v2f i) : COLOR +{ +float2 DoodleUV_1 = DoodleUV(i.texcoord,DoodleUV_Size_1,DoodleUV_Frame_1); +i.texcoord = lerp(i.texcoord,DoodleUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/DoodleDraw.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/DoodleDraw.shader.meta new file mode 100644 index 00000000..97f51dbd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/DoodleDraw.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8bf3764d35b24d74e947dc4ef8004e54 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Emboss.shader b/Assets/2DxFX/ExtraShaders/Shader/Emboss.shader new file mode 100644 index 00000000..4b6696f3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Emboss.shader @@ -0,0 +1,127 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Emboss" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Emboss_Angle_1("_Emboss_Angle_1", Range(-1, 1)) = 0 +_Emboss_Distance_1("_Emboss_Distance_1", Range(0, 16)) = 0.3 +_Emboss_Intensity_1("_Emboss_Intensity_1", Range(-2, 2)) = 1.479 +_Emboss_grayfade_1("_Emboss_grayfade_1", Range(-2, 2)) = 1 +_Emboss_original_1("_Emboss_original_1", Range(-2, 2)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Emboss_Angle_1; +float _Emboss_Distance_1; +float _Emboss_Intensity_1; +float _Emboss_grayfade_1; +float _Emboss_original_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Emboss(sampler2D txt, float2 uv, float angle, float dist, float intensity, float g, float o) +{ +angle = angle *3.1415926; +intensity = intensity *0.25; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float m1 = 1; float m2 = 0; float m3 = 0; +float m4 = 0; float m5 = 0; float m6 = 0; +float m7 = 0; float m8 = 0; float m9 = -1; +float Offset = 0.5; +float Scale = 1; +float4 r = float4(0, 0, 0, 0); +dist = dist * 0.005; +float4 rgb = tex2D(txt, uv); +r += tex2D(txt, uv + rot(float2(-dist, -dist))).a * m1*intensity; +r += tex2D(txt, uv + rot(float2(0, -dist))).a * m2*intensity; +r += tex2D(txt, uv + rot(float2(dist, -dist))).a * m3*intensity; +r += tex2D(txt, uv + rot(float2(-dist, 0))).a * m4*intensity; +r += tex2D(txt, uv + rot(float2(0, 0))).a* m5*intensity; +r += tex2D(txt, uv + rot(float2(dist, 0))).a * m6*intensity; +r += tex2D(txt, uv + rot(float2(-dist, dist))).a * m7*intensity; +r += tex2D(txt, uv + rot(float2(0, dist))).a * m8*intensity; +r += tex2D(txt, uv + rot(float2(dist, dist))).a * m9*intensity; +r = lerp(r,dot(r.rgb,3),g); +r = lerp(r+0.5,rgb+r,o); +r = saturate(r); +r.a = rgb.a; +return r; +} +float4 frag (v2f i) : COLOR +{ +float4 _Emboss_1 = Emboss(_MainTex,i.texcoord,_Emboss_Angle_1,_Emboss_Distance_1,_Emboss_Intensity_1,_Emboss_grayfade_1,_Emboss_original_1); +float4 FinalResult = _Emboss_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Emboss.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Emboss.shader.meta new file mode 100644 index 00000000..d2434a2f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Emboss.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0ef5c3ed494698749b358bd89a26a549 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/EmbossFull.shader b/Assets/2DxFX/ExtraShaders/Shader/EmbossFull.shader new file mode 100644 index 00000000..d116ac0d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/EmbossFull.shader @@ -0,0 +1,127 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/EmbossFull" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_EmbossFull_Angle_1("_EmbossFull_Angle_1", Range(-1, 1)) = 0 +_EmbossFull_Distance_1("_EmbossFull_Distance_1", Range(0, 16)) = 0.3 +_EmbossFull_Intensity_1("_EmbossFull_Intensity_1", Range(-2, 2)) = 1 +_EmbossFull_grayfade_1("_EmbossFull_grayfade_1", Range(-2, 2)) = 1 +_EmbossFull_original_1("_EmbossFull_original_1", Range(-2, 2)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _EmbossFull_Angle_1; +float _EmbossFull_Distance_1; +float _EmbossFull_Intensity_1; +float _EmbossFull_grayfade_1; +float _EmbossFull_original_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 EmbossFull(sampler2D txt, float2 uv, float angle, float dist, float intensity, float g, float o) +{ +angle = angle *3.1415926; +intensity = intensity *0.25; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float m1 = 0; float m2 = 0; float m3 = 0; +float m4 = 0; float m5 = 1; float m6 = 0; +float m7 = 0; float m8 = 0; float m9 = -1; +float Offset = 0.5; +float Scale = 1; +float4 r = float4(0, 0, 0, 0); +dist = dist * 0.005; +float4 rgb = tex2D(txt, uv); +r += tex2D(txt, uv + rot(float2(-dist, -dist))) * m1*intensity; +r += tex2D(txt, uv + rot(float2(0, -dist))) * m2*intensity; +r += tex2D(txt, uv + rot(float2(dist, -dist))) * m3*intensity; +r += tex2D(txt, uv + rot(float2(-dist, 0))) * m4*intensity; +r += tex2D(txt, uv + rot(float2(0, 0)))* m5*intensity; +r += tex2D(txt, uv + rot(float2(dist, 0))) * m6*intensity; +r += tex2D(txt, uv + rot(float2(-dist, dist))) * m7*intensity; +r += tex2D(txt, uv + rot(float2(0, dist))) * m8*intensity; +r += tex2D(txt, uv + rot(float2(dist, dist))) * m9*intensity; +r = lerp(r,dot(r.rgb,3),g); +r = lerp(r+0.5,rgb+r,o); +r = saturate(r); +r.a = rgb.a; +return r; +} +float4 frag (v2f i) : COLOR +{ +float4 _EmbossFull_1 = EmbossFull(_MainTex,i.texcoord,_EmbossFull_Angle_1,_EmbossFull_Distance_1,_EmbossFull_Intensity_1,_EmbossFull_grayfade_1,_EmbossFull_original_1); +float4 FinalResult = _EmbossFull_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/EmbossFull.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/EmbossFull.shader.meta new file mode 100644 index 00000000..a23e3cfb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/EmbossFull.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4059dc51567742e4097cf1479cff7e86 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Explode.shader b/Assets/2DxFX/ExtraShaders/Shader/Explode.shader new file mode 100644 index 00000000..2b81b434 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Explode.shader @@ -0,0 +1,117 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Explode" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Explode_Value("Explode_Value", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Explode_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Generate_Noise(float2 co, float black) +{ +float4 r = frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453); +r.a = saturate(r.a + black); +return r; +} +float2 FishEyeUV(float2 uv, float size) +{ +float2 m = float2(0.5, 0.5); +float2 d = uv - m; +float r = sqrt(dot(d, d)); +float power = (2.0 * 3.141592 / (2.0 * sqrt(dot(m, m)))) * (size+0.001); +float bind = sqrt(dot(m, m)); +uv = m + normalize(d) * tan(r * power) * bind / tan(bind * power); +return uv; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float2 FishEyeUV_1 = FishEyeUV(i.texcoord,0.482); +float4 _Generate_Line_1 = Generate_Noise(i.texcoord,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(FishEyeUV_1,0,_Generate_Line_1.g*_Generate_Line_1.a,-0.3); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_1,Explode_Value); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Explode.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Explode.shader.meta new file mode 100644 index 00000000..93631c70 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Explode.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8255d89154979384691d601c434ee522 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/FishEye.shader b/Assets/2DxFX/ExtraShaders/Shader/FishEye.shader new file mode 100644 index 00000000..11ca96f6 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/FishEye.shader @@ -0,0 +1,105 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/FishEye" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +FishEyeUV_Size_1("FishEyeUV_Size_1", Range(0, 0.5)) = 0.185 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float FishEyeUV_Size_1; +float Effect_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 FishEyeUV(float2 uv, float size) +{ +float2 m = float2(0.5, 0.5); +float2 d = uv - m; +float r = sqrt(dot(d, d)); +float power = (2.0 * 3.141592 / (2.0 * sqrt(dot(m, m)))) * (size+0.001); +float bind = sqrt(dot(m, m)); +uv = m + normalize(d) * tan(r * power) * bind / tan(bind * power); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 FishEyeUV_1 = FishEyeUV(i.texcoord,FishEyeUV_Size_1); +i.texcoord = lerp(i.texcoord,FishEyeUV_1,Effect_Fade); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/FishEye.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/FishEye.shader.meta new file mode 100644 index 00000000..f23ecbfe --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/FishEye.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 84cd2209de3fd8047bbf4f22c63083e4 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fluo.shader b/Assets/2DxFX/ExtraShaders/Shader/Fluo.shader new file mode 100644 index 00000000..a3388ad3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fluo.shader @@ -0,0 +1,101 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Fluo" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ColorFilters_Fade_1("_ColorFilters_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _ColorFilters_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ColorFilters(float4 rgba, float4 red, float4 green, float4 blue, float fade) +{ +float3 c_r = float3(red.r, red.g, red.b); +float3 c_g = float3(green.r, green.g, green.b); +float3 c_b = float3(blue.r, blue.g, blue.b); +float4 r = float4(dot(rgba.rgb, c_r) + red.a, dot(rgba.rgb, c_g) + green.a, dot(rgba.rgb, c_b) + blue.a, rgba.a); +return lerp(rgba, saturate(r), fade); + +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _ColorFilters_1 = ColorFilters(_MainTex_1,float4(1,0,0,0),float4(0,1.13,0,0),float4(2,-2,-2,0.36),_ColorFilters_Fade_1); +float4 FinalResult = _ColorFilters_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fluo.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Fluo.shader.meta new file mode 100644 index 00000000..5ec19d5e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fluo.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5484ecf8e593e4247ba0c29b884c5171 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fusion2Sprites.shader b/Assets/2DxFX/ExtraShaders/Shader/Fusion2Sprites.shader new file mode 100644 index 00000000..54a03fe9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fusion2Sprites.shader @@ -0,0 +1,105 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Fusion2Sprites" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_NewTex_1("NewTex_1(RGB)", 2D) = "white" { } +_OperationBlend_Fade_1("_OperationBlend_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +sampler2D _NewTex_1; +float _OperationBlend_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 OperationBlend(float4 origin, float4 overlay, float blend) +{ +float4 o = origin; +o.a = overlay.a + origin.a * (1 - overlay.a); + +o.rgb = (overlay.rgb * overlay.a + origin.rgb * origin.a * (1 - overlay.a)) / (o.a+0.0000001); +o.a = saturate(o.a); +o = lerp(origin, o, blend); +return o; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 NewTex_1 = tex2D(_NewTex_1, i.texcoord); +float4 OperationBlend_1 = OperationBlend(_MainTex_1, NewTex_1, _OperationBlend_Fade_1); +float4 FinalResult = OperationBlend_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fusion2Sprites.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Fusion2Sprites.shader.meta new file mode 100644 index 00000000..4fe73645 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fusion2Sprites.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 72b228f0feba05649b6ab82b873ebf54 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fusion2SpritesAdditive.shader b/Assets/2DxFX/ExtraShaders/Shader/Fusion2SpritesAdditive.shader new file mode 100644 index 00000000..e6e2940e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fusion2SpritesAdditive.shader @@ -0,0 +1,95 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Fusion2SpritesAdditive" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_NewTex_1("NewTex_1(RGB)", 2D) = "white" { } +_Add_Fade_1("_Add_Fade_1", Range(0, 4)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +sampler2D _NewTex_1; +float _Add_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 NewTex_1 = tex2D(_NewTex_1, i.texcoord); +_MainTex_1 = lerp(_MainTex_1,_MainTex_1*_MainTex_1.a + NewTex_1*NewTex_1.a,_Add_Fade_1 * NewTex_1.a); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fusion2SpritesAdditive.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Fusion2SpritesAdditive.shader.meta new file mode 100644 index 00000000..8d260306 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fusion2SpritesAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 73dc7ade7aa528648b061430c102a1ca +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fusion3Sprites.shader b/Assets/2DxFX/ExtraShaders/Shader/Fusion3Sprites.shader new file mode 100644 index 00000000..e1e46ecd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fusion3Sprites.shader @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Fusion3Sprites" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_NewTex_1("NewTex_1(RGB)", 2D) = "white" { } +_OperationBlend_Fade_1("_OperationBlend_Fade_1", Range(0, 1)) = 1 +_NewTex_2("NewTex_2(RGB)", 2D) = "white" { } +_OperationBlend_Fade_2("_OperationBlend_Fade_2", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +sampler2D _NewTex_1; +float _OperationBlend_Fade_1; +sampler2D _NewTex_2; +float _OperationBlend_Fade_2; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 OperationBlend(float4 origin, float4 overlay, float blend) +{ +float4 o = origin; +o.a = overlay.a + origin.a * (1 - overlay.a); +o.rgb = (overlay.rgb * overlay.a + origin.rgb * origin.a * (1 - overlay.a)) / (o.a+0.0000001); +o.a = saturate(o.a); +o = lerp(origin, o, blend); +return o; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 NewTex_1 = tex2D(_NewTex_1, i.texcoord); +float4 OperationBlend_1 = OperationBlend(_MainTex_1, NewTex_1, _OperationBlend_Fade_1); +float4 NewTex_2 = tex2D(_NewTex_2, i.texcoord); +float4 OperationBlend_2 = OperationBlend(OperationBlend_1, NewTex_2, _OperationBlend_Fade_2); +float4 FinalResult = OperationBlend_2; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Fusion3Sprites.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Fusion3Sprites.shader.meta new file mode 100644 index 00000000..6c5f6909 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Fusion3Sprites.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b6cf63a79577f764b964e51a12312ea7 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/GhostClipping.shader b/Assets/2DxFX/ExtraShaders/Shader/GhostClipping.shader new file mode 100644 index 00000000..3c061ddc --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/GhostClipping.shader @@ -0,0 +1,112 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/GhostClipping" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_GhostFX_Smooth_1("_GhostFX_Smooth_1", Range(0, 1)) = 1 +_GhostFX_ClipUp_1("_GhostFX_ClipUp_1", Range(0, 1)) = 0.582 +_GhostFX_ClipDown_1("_GhostFX_ClipDown_1", Range(0, 1)) = 0.616 +_GhostFX_ClipLeft_1("_GhostFX_ClipLeft_1", Range(0, 1)) = 0.518 +_GhostFX_ClipRight_1("_GhostFX_ClipRight_1", Range(0, 1)) = 0.518 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _GhostFX_Smooth_1; +float _GhostFX_ClipUp_1; +float _GhostFX_ClipDown_1; +float _GhostFX_ClipLeft_1; +float _GhostFX_ClipRight_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 GhostFX(float4 txt, float2 uv, float smooth, float up, float down, float left, float right) +{ +float a = txt.a; +float c1 = 1; +float noffset = smooth; +if (uv.y > up) c1 = saturate(((1 + noffset) / (1 - up))*(1 - uv.y) - noffset); +if (uv.y < 1 - down) c1 *= saturate(((1 + noffset) / (1 - down))*uv.y - noffset); +if (uv.x > right) c1 *= saturate(((1 + noffset) / (1 - right))*(1 - uv.x) - noffset); +if (uv.x < 1 - left) c1 *= saturate(((1 + noffset) / (1 - left))*uv.x - noffset); +txt.a = a*c1; +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _GhostFX_1 = GhostFX(_MainTex_1,i.texcoord,_GhostFX_Smooth_1,_GhostFX_ClipUp_1,_GhostFX_ClipDown_1,_GhostFX_ClipLeft_1,_GhostFX_ClipRight_1); +float4 FinalResult = _GhostFX_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/GhostClipping.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/GhostClipping.shader.meta new file mode 100644 index 00000000..1d4b8dfd --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/GhostClipping.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3db47a6cce66fcc45b1fa61aa1abd809 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Glitch.shader b/Assets/2DxFX/ExtraShaders/Shader/Glitch.shader new file mode 100644 index 00000000..f8b4df1c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Glitch.shader @@ -0,0 +1,112 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Glitch" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +__CompressionFX_Value_1("__CompressionFX_Value_1", Range(1, 16)) = 3 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float __CompressionFX_Value_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float CMPFXrng2(float2 seed) +{ +return frac(sin(dot(seed * floor(50 + (_Time + 0.1) * 12.), float2(127.1, 311.7))) * 43758.5453123); +} + +float CMPFXrng(float seed) +{ +return CMPFXrng2(float2(seed, 1.0)); +} + +float4 CompressionFX(float2 uv, sampler2D source,float Value) +{ +float2 blockS = floor(uv * float2(24., 19.))*4.0; +float2 blockL = floor(uv * float2(38., 14.))*4.0; +float r = CMPFXrng2(uv); +float lineNoise = pow(CMPFXrng2(blockS), 3.0) *Value* pow(CMPFXrng2(blockL), 3.0); +float4 col1 = tex2D(source, uv + float2(lineNoise * 0.02 * CMPFXrng(2.0), 0)); +float4 result = float4(float3(col1.x, col1.y, col1.z), 1.0); +result.a = col1.a; +return result; +} +float4 frag (v2f i) : COLOR +{ +float4 _CompressionFX_1 = CompressionFX(i.texcoord,_MainTex,__CompressionFX_Value_1); +float4 FinalResult = _CompressionFX_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Glitch.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Glitch.shader.meta new file mode 100644 index 00000000..a4f39f4b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Glitch.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dca869258548efe47b75fa579a5bca54 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasite.shader b/Assets/2DxFX/ExtraShaders/Shader/HologramParasite.shader new file mode 100644 index 00000000..39a9464e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasite.shader @@ -0,0 +1,161 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Hologram_Parasite" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Parasite_Distance("Parasite_Distance", Range(-0.3, 0.3)) = 0.3 +Parasite_Angle("Parasite_Angle", Range(-1, 1)) = 0.208 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Parasite_Distance; +float Parasite_Angle; +float Effect_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,1,1); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Hologram_1,Parasite_Distance,Parasite_Angle); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Effect_Fade); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = SourceRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasite.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HologramParasite.shader.meta new file mode 100644 index 00000000..20cfab7b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasite.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8885778bcc7cf884b885f4ba72eeadec +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteAdditive.shader b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteAdditive.shader new file mode 100644 index 00000000..5074809b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteAdditive.shader @@ -0,0 +1,161 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/HologramParasiteAdditive" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Parasite_Distance("Parasite_Distance", Range(-0.3, 0.3)) = 0.3 +Parasite_Angle("Parasite_Angle", Range(-1, 1)) = 0.208 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Parasite_Distance; +float Parasite_Angle; +float Effect_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,1,1); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Hologram_1,Parasite_Distance,Parasite_Angle); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Effect_Fade); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = SourceRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteAdditive.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteAdditive.shader.meta new file mode 100644 index 00000000..465f00f9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 365bf37fc596f68478fed67f137dc082 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTint.shader b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTint.shader new file mode 100644 index 00000000..c5df686c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTint.shader @@ -0,0 +1,171 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/HologramParasiteTint" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Parasite_Distance("Parasite_Distance", Range(-0.3, 0.3)) = 0.3 +Parasite_Angle("Parasite_Angle", Range(-1, 1)) = 0.208 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +Tint_Color("Tint_Color", COLOR) = (0,0.462069,1,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Parasite_Distance; +float Parasite_Angle; +float Effect_Fade; +float4 Tint_Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float4 TintRGBA(float4 txt, float4 color) +{ +float3 tint = dot(txt.rgb, float3(.222, .707, .071)); +tint.rgb *= color.rgb; +txt.rgb = lerp(txt.rgb,tint.rgb,color.a); +return txt; +} +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,1,1); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Hologram_1,Parasite_Distance,Parasite_Angle); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Effect_Fade); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +float4 TintRGBA_1 = TintRGBA(SourceRGBA_1,Tint_Color); +float4 FinalResult = TintRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTint.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTint.shader.meta new file mode 100644 index 00000000..72913085 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTint.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a757c21eb758ffd4c84dba717c5d1a2d +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTintAdditive.shader b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTintAdditive.shader new file mode 100644 index 00000000..22c46e34 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTintAdditive.shader @@ -0,0 +1,171 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/HologramParasiteTintAdditive" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Parasite_Distance("Parasite_Distance", Range(-0.3, 0.3)) = 0.3 +Parasite_Angle("Parasite_Angle", Range(-1, 1)) = 0.208 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +Tint_Color("Tint_Color", COLOR) = (0,0.462069,1,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Parasite_Distance; +float Parasite_Angle; +float Effect_Fade; +float4 Tint_Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float4 TintRGBA(float4 txt, float4 color) +{ +float3 tint = dot(txt.rgb, float3(.222, .707, .071)); +tint.rgb *= color.rgb; +txt.rgb = lerp(txt.rgb,tint.rgb,color.a); +return txt; +} +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,1,1); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Hologram_1,Parasite_Distance,Parasite_Angle); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Effect_Fade); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +float4 TintRGBA_1 = TintRGBA(SourceRGBA_1,Tint_Color); +float4 FinalResult = TintRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTintAdditive.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTintAdditive.shader.meta new file mode 100644 index 00000000..8b4e0654 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramParasiteTintAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f72cf2239ac7cdc42bc66eff7aef809e +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramScanLine.shader b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLine.shader new file mode 100644 index 00000000..21e302d5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLine.shader @@ -0,0 +1,176 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/HologramScanLine" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 Generate_Lines(float uvs, float size, float black) +{ +float4 r = step(0.5 / size, fmod(uvs, 1 / size)); +r.a = saturate(r.a + black); +return r; +} +float2 AnimatedZoomUV(float2 uv, float zoom, float posx, float posy, float radius, float speed) +{ +float2 center = float2(posx, posy); +uv -= center; +zoom -= radius * 0.1; +zoom += sin(_Time * speed * 20) * 0.1 * radius; +uv = uv * zoom; +uv += center; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,1,1); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Hologram_1,0.3,0.208); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,0.139); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +float2 AnimatedZoomUV_1 = AnimatedZoomUV(i.texcoord,1.261,0.5,0.5,3.034,3.207); +float4 _Generate_Line_1 = Generate_Lines(AnimatedZoomUV_1.y,150,0); +SourceRGBA_1 = lerp(SourceRGBA_1,SourceRGBA_1 * _Generate_Line_1,1); +float4 FinalResult = SourceRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramScanLine.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLine.shader.meta new file mode 100644 index 00000000..a9e03040 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLine.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 24089ec03e4e6d84f9798e54a4f2e3fe +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramScanLineAdditive.shader b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLineAdditive.shader new file mode 100644 index 00000000..26f22a5e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLineAdditive.shader @@ -0,0 +1,176 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/HologramScanLineAdditive" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 Generate_Lines(float uvs, float size, float black) +{ +float4 r = step(0.5 / size, fmod(uvs, 1 / size)); +r.a = saturate(r.a + black); +return r; +} +float2 AnimatedZoomUV(float2 uv, float zoom, float posx, float posy, float radius, float speed) +{ +float2 center = float2(posx, posy); +uv -= center; +zoom -= radius * 0.1; +zoom += sin(_Time * speed * 20) * 0.1 * radius; +uv = uv * zoom; +uv += center; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,1,1); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Hologram_1,0.3,0.208); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,0.139); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +float2 AnimatedZoomUV_1 = AnimatedZoomUV(i.texcoord,1.261,0.5,0.5,3.034,3.207); +float4 _Generate_Line_1 = Generate_Lines(AnimatedZoomUV_1.y,150,0); +SourceRGBA_1 = lerp(SourceRGBA_1,SourceRGBA_1 * _Generate_Line_1,1); +float4 FinalResult = SourceRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HologramScanLineAdditive.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLineAdditive.shader.meta new file mode 100644 index 00000000..cb2fca49 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HologramScanLineAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a22ead6f9095085438cc1dfce3584e55 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Holographic.shader b/Assets/2DxFX/ExtraShaders/Shader/Holographic.shader new file mode 100644 index 00000000..27cadff5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Holographic.shader @@ -0,0 +1,146 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Holographic" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Hologram_Value_1("_Hologram_Value_1", Range(-1, 1)) = 1 +_Hologram_Speed_1("_Hologram_Speed_1", Range(0, 4)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Hologram_Value_1; +float _Hologram_Speed_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +return video; +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,_Hologram_Value_1,_Hologram_Speed_1); +float4 FinalResult = _Hologram_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Holographic.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Holographic.shader.meta new file mode 100644 index 00000000..52f25c3c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Holographic.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2b20891c56f72794cb9fd16802a7c3a3 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HolographicTint.shader b/Assets/2DxFX/ExtraShaders/Shader/HolographicTint.shader new file mode 100644 index 00000000..e16346dc --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HolographicTint.shader @@ -0,0 +1,162 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/HolographicTint" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 +_Hologram_Value("_Hologram_Value", Range(0, 1)) = 0.598 +_Hologram_Speed("_Hologram_Speed", Range(0, 4)) = 0.679 +_TintColor("_TintColor", COLOR) = (0,0.647059,1,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma multi_compile _ PIXELSNAP_ON +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Hologram_Value; +float _Hologram_Speed; +float4 _TintColor; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float4 TintRGBA(float4 txt, float4 color) +{ +float3 tint = dot(txt.rgb, float3(.222, .707, .071)); +tint.rgb *= color.rgb; +txt.rgb = lerp(txt.rgb,tint.rgb,color.a); +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,_Hologram_Value,_Hologram_Speed); +float4 TintRGBA_1 = TintRGBA(_Hologram_1,_TintColor); +float4 FinalResult = TintRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HolographicTint.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HolographicTint.shader.meta new file mode 100644 index 00000000..c95cc55c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HolographicTint.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b677c954268f0b540b56afc6725ad2de +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/HolographicTintAdditive.shader b/Assets/2DxFX/ExtraShaders/Shader/HolographicTintAdditive.shader new file mode 100644 index 00000000..2c060a12 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HolographicTintAdditive.shader @@ -0,0 +1,162 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/HolographicTintAdditive" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 +_Hologram_Value("_Hologram_Value", Range(0, 1)) = 0.598 +_Hologram_Speed("_Hologram_Speed", Range(0, 4)) = 0.679 +_TintColor("_TintColor", COLOR) = (0,0.647059,1,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma multi_compile _ PIXELSNAP_ON +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Hologram_Value; +float _Hologram_Speed; +float4 _TintColor; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float Holo1mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float Holo1noise(sampler2D source,float2 p) +{ +float _TimeX = _Time.y; +float sample = tex2D(source,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + +inline float Holo1onOff(float a, float b, float c) +{ +float _TimeX = _Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +float4 Hologram(float2 uv, sampler2D source, float value, float speed) +{ +float alpha = tex2D(source, uv).a; +float _TimeX = _Time.y * speed; +float2 look = uv; +float window = 1. / (1. + 20.*(look.y - Holo1mod(_TimeX / 4., 1.))*(look.y - Holo1mod(_TimeX / 4., 1.))); +look.x = look.x + sin(look.y*30. + _TimeX) / (50.*value)*Holo1onOff(4., 4., .3)*(1. + cos(_TimeX*80.))*window; +float vShift = .4*Holo1onOff(2., 3., .9)*(sin(_TimeX)*sin(_TimeX*20.) + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); +look.y = Holo1mod(look.y + vShift, 1.); +float4 video = float4(0, 0, 0, 0); +float4 videox = tex2D(source, look); +video.r = tex2D(source, look - float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).r; +video.g = videox.g; +video.b = tex2D(source, look + float2(.05, 0.)*Holo1onOff(2., 1.5, .9)).b; +video.a = videox.a; +video = video; +float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); +float noi = Holo1noise(source,uv*float2(0.5, 1.) + float2(6., 3.))*value * 3; +float y = Holo1mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)), 1.); +float start = .5; +float end = .6; +float inside = step(start, y) - step(end, y); +float fact = (y - start) / (end - start)*inside; +float f1 = (1. - fact) * inside; +video += f1*noi; +video += Holo1noise(source,uv*2.) / 2.; +video.r *= vignette; +video *= (12. + Holo1mod(uv.y*30. + _TimeX, 1.)) / 13.; +video.a = video.a + (frac(sin(dot(uv.xy*_TimeX, float2(12.9898, 78.233))) * 43758.5453))*.5; +video.a = (video.a*.3)*alpha*vignette * 2; +video.a *=1.2; +video.a *= 1.2; +video = lerp(tex2D(source, uv), video, value); +return video; +} +float4 TintRGBA(float4 txt, float4 color) +{ +float3 tint = dot(txt.rgb, float3(.222, .707, .071)); +tint.rgb *= color.rgb; +txt.rgb = lerp(txt.rgb,tint.rgb,color.a); +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _Hologram_1 = Hologram(i.texcoord,_MainTex,_Hologram_Value,_Hologram_Speed); +float4 TintRGBA_1 = TintRGBA(_Hologram_1,_TintColor); +float4 FinalResult = TintRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/HolographicTintAdditive.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/HolographicTintAdditive.shader.meta new file mode 100644 index 00000000..26ee4554 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/HolographicTintAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f3fd3fc48d5e9524dae38e665e94edea +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/InfiniteZoom.shader b/Assets/2DxFX/ExtraShaders/Shader/InfiniteZoom.shader new file mode 100644 index 00000000..28493971 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/InfiniteZoom.shader @@ -0,0 +1,120 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/InfiniteZoom" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1("AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1", Range(-1, 4)) = 1 +AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1("AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1", Range(-1, 2)) = 0 +AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1("AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1", Range(-1, 2)) = 0 +AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1("AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1", Range(0, 4)) = 1 +AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1("AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1", Range(-10, 10)) = 1 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1; +float AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1; +float AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1; +float AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1; +float AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedInfiniteZoomUV(float2 uv, float zoom2, float posx, float posy, float radius, float speed) +{ +uv+=float2(posx,posy); +float2 muv = uv; +float atans = (atan2(uv.x - 0.5, uv.y - 0.5) + 3.1415) / (3.1415 * 2.); +float time = _Time * speed*10; +uv -= 0.5; + uv *= (1. / pow(4., frac(time / 2.))); +uv += 0.5; +float2 tri = abs(1. - (uv * 2.)); + float zoom = min(pow(2., floor(-log2(tri.x))), pow(2., floor(-log2(tri.y)))); + float zoom_id = log2(zoom) + 1.; + float div = ((pow(2., ((-zoom_id) - 1.)) * ((-2.) + pow(2., zoom_id)))); + float2 uv2 = (((uv) - (div)) * zoom); + uv2 = lerp(muv * radius, uv2 * radius, zoom2); + return uv2; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedInfiniteZoomUV_1 = AnimatedInfiniteZoomUV(i.texcoord,AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Zoom_1,AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosX_1,AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_PosY_1,AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Intensity_1,AnimatedInfiniteZoomUV_AnimatedInfiniteZoomUV_Speed_1); +i.texcoord = lerp(i.texcoord,AnimatedInfiniteZoomUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/InfiniteZoom.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/InfiniteZoom.shader.meta new file mode 100644 index 00000000..267c1217 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/InfiniteZoom.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 978451e277ae84f4e8d89a387d5b7cae +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/InnerGlow.shader b/Assets/2DxFX/ExtraShaders/Shader/InnerGlow.shader new file mode 100644 index 00000000..0f7fcfb3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/InnerGlow.shader @@ -0,0 +1,135 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/InnerGlow" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_InnerGlowHQ_Intensity_1("_InnerGlowHQ_Intensity_1", Range(1, 16)) = 6.457 +_InnerGlowHQ_Size_1("_InnerGlowHQ_Size_1", Range(1, 16)) = 1.114 +_InnerGlowHQ_Color_1("_InnerGlowHQ_Color_1", COLOR) = (1,1,0,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _InnerGlowHQ_Intensity_1; +float _InnerGlowHQ_Size_1; +float4 _InnerGlowHQ_Color_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float InnerGlowAlpha(sampler2D source, float2 uv) +{ +return (1 - tex2D(source, uv).a); +} +float4 InnerGlow(float2 uv, sampler2D source, float Intensity, float size, float4 color) +{ +float step1 = 0.00390625f * size*2; +float step2 = step1 * 2; +float4 result = float4 (0, 0, 0, 0); +float2 texCoord = float2(0, 0); +texCoord = uv + float2(-step2, -step2); result += InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step1, -step2); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(0, -step2); result += 6.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step1, -step2); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step2, -step2); result += InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step2, -step1); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step1, -step1); result += 16.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(0, -step1); result += 24.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step1, -step1); result += 16.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step2, -step1); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step2, 0); result += 6.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step1, 0); result += 24.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv; result += 36.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step1, 0); result += 24.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step2, 0); result += 6.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step2, step1); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step1, step1); result += 16.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(0, step1); result += 24.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step1, step1); result += 16.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step2, step1); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step2, step2); result += InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(-step1, step2); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(0, step2); result += 6.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step1, step2); result += 4.0 * InnerGlowAlpha(source, texCoord); +texCoord = uv + float2(step2, step2); result += InnerGlowAlpha(source, texCoord); +result = result*0.00390625; +result = lerp(tex2D(source,uv),color*Intensity,result*color.a); +result.a = tex2D(source, uv).a; +return saturate(result); +} +float4 frag (v2f i) : COLOR +{ +float4 _InnerGlowHQ_1 = InnerGlow(i.texcoord,_MainTex,_InnerGlowHQ_Intensity_1,_InnerGlowHQ_Size_1,_InnerGlowHQ_Color_1); +float4 FinalResult = _InnerGlowHQ_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/InnerGlow.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/InnerGlow.shader.meta new file mode 100644 index 00000000..1f7cc681 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/InnerGlow.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1302b96b232cae941af8656368d57ece +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/InsideDistortion.shader b/Assets/2DxFX/ExtraShaders/Shader/InsideDistortion.shader new file mode 100644 index 00000000..1eb9cbab --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/InsideDistortion.shader @@ -0,0 +1,115 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/InsideDistortion" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Inside_Distance("Inside_Distance", Range(-0.3, 0.3)) = 0.3 +Inside_Rotation("Inside_Rotation", Range(-1, 1)) = -0.099 +Inside_Fade("Inside_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Inside_Distance; +float Inside_Rotation; +float Inside_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + + +float4 grayscale(float4 txt,float fade) +{ +float3 gs = dot(txt.rgb, float3(0.3, 0.59, 0.11)); +return lerp(txt,float4(gs, txt.a), fade); +} + +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 frag (v2f i) : COLOR +{ +float4 SourceRGBA_2 = tex2D(_MainTex, i.texcoord); +float4 GrayScale_1 = grayscale(SourceRGBA_2,1); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,GrayScale_1,Inside_Distance,Inside_Rotation); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Inside_Fade); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +SourceRGBA_1.a = lerp(SourceRGBA_2.a * SourceRGBA_1.a, (1 - SourceRGBA_2.a) * SourceRGBA_1.a,0); +float4 FinalResult = SourceRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/InsideDistortion.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/InsideDistortion.shader.meta new file mode 100644 index 00000000..4837657c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/InsideDistortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8355a635004e37d40a6f13fc89e2d8cb +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/JpegCompressionStyle.shader b/Assets/2DxFX/ExtraShaders/Shader/JpegCompressionStyle.shader new file mode 100644 index 00000000..960367a2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/JpegCompressionStyle.shader @@ -0,0 +1,102 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/JpegCompressionStyle" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +PixelUV_Size_1("PixelUV_Size_1", Range(1, 128)) = 32 +_Jpeg_Compression_1("_Jpeg_Compression_1", Range(0, 1)) = 0.598 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float PixelUV_Size_1; +float _Jpeg_Compression_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,PixelUV_Size_1); +i.texcoord = lerp(i.texcoord,PixelUV_1,_Jpeg_Compression_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/JpegCompressionStyle.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/JpegCompressionStyle.shader.meta new file mode 100644 index 00000000..8a3fcff5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/JpegCompressionStyle.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2ca0c962c5ac05b4299f4c5806677ad7 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Kaleidoscope.shader b/Assets/2DxFX/ExtraShaders/Shader/Kaleidoscope.shader new file mode 100644 index 00000000..78cfe986 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Kaleidoscope.shader @@ -0,0 +1,111 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Kaleidoscope" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +KaleidoscopeUV_PosX_1("KaleidoscopeUV_PosX_1", Range(-2, 2)) = 0.5 +KaleidoscopeUV_PosY_1("KaleidoscopeUV_PosY_1", Range(-2, 2)) = 0.5 +KaleidoscopeUV_Number_1("KaleidoscopeUV_Number_1", Range(0, 6)) = 1 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float KaleidoscopeUV_PosX_1; +float KaleidoscopeUV_PosY_1; +float KaleidoscopeUV_Number_1; +float Effect_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 KaleidoscopeUV(float2 uv, float posx, float posy, float number) +{ +uv = uv - float2(posx, posy); +float r = length(uv); +float a = abs(atan2(uv.y, uv.x)); +float sides = number; +float tau = 3.1416; +a = fmod(a, tau / sides); +a = abs(a - tau / sides / 2.); +uv = r * float2(cos(a), sin(a)); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 KaleidoscopeUV_1 = KaleidoscopeUV(i.texcoord,KaleidoscopeUV_PosX_1,KaleidoscopeUV_PosY_1,KaleidoscopeUV_Number_1); +i.texcoord = lerp(i.texcoord,KaleidoscopeUV_1,Effect_Fade); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Kaleidoscope.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Kaleidoscope.shader.meta new file mode 100644 index 00000000..9052ec6a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Kaleidoscope.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 07ffa1b76cafac54384178e718329e69 +timeCreated: 1542019633 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Lerp2sprites.shader b/Assets/2DxFX/ExtraShaders/Shader/Lerp2sprites.shader new file mode 100644 index 00000000..ef1fad52 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Lerp2sprites.shader @@ -0,0 +1,95 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Lerp2sprites" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_NewTex_1("NewTex_1(RGB)", 2D) = "white" { } +_Lerp_Fade_1("_Lerp_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +sampler2D _NewTex_1; +float _Lerp_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 NewTex_1 = tex2D(_NewTex_1, i.texcoord); +_MainTex_1 = lerp(_MainTex_1,NewTex_1,_Lerp_Fade_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Lerp2sprites.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Lerp2sprites.shader.meta new file mode 100644 index 00000000..2ec9462d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Lerp2sprites.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 176698c2a9ab49945a58af189ac3ebb9 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/LightGlow.shader b/Assets/2DxFX/ExtraShaders/Shader/LightGlow.shader new file mode 100644 index 00000000..274501e5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/LightGlow.shader @@ -0,0 +1,130 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/LightGlow" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ShadowLight_Precision_1("_ShadowLight_Precision_1", Range(1, 32)) = 14.311 +_ShadowLight_Size_1("_ShadowLight_Size_1", Range(0, 16)) = 0.686 +_ShadowLight_Color_1("_ShadowLight_Color_1", COLOR) = (0,0.7,1,1) +_ShadowLight_Intensity_1("_ShadowLight_Intensity_1", Range(0, 4)) = 3.664 +_ShadowLight_PosX_1("_ShadowLight_PosX_1", Range(-1, 1)) = 0 +_ShadowLight_PosY_1("_ShadowLight_PosY_1", Range(-1, 1)) = 0 +_ShadowLight_NoSprite_1("_ShadowLight_NoSprite_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _ShadowLight_Precision_1; +float _ShadowLight_Size_1; +float4 _ShadowLight_Color_1; +float _ShadowLight_Intensity_1; +float _ShadowLight_PosX_1; +float _ShadowLight_PosY_1; +float _ShadowLight_NoSprite_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ShadowLight(sampler2D source, float2 uv, float precision, float size, float4 color, float intensity, float posx, float posy,float fade) +{ +int samples = precision; +int samples2 = samples *0.5; +float4 ret = float4(0, 0, 0, 0); +float count = 0; +for (int iy = -samples2; iy < samples2; iy++) +{ +for (int ix = -samples2; ix < samples2; ix++) +{ +float2 uv2 = float2(ix, iy); +uv2 /= samples; +uv2 *= size*0.1; +uv2 += float2(-posx,posy); +uv2 = saturate(uv+uv2); +ret += tex2D(source, uv2); +count++; +} +} +ret = lerp(float4(0, 0, 0, 0), ret / count, intensity); +ret.rgb = color.rgb; +float4 m = ret; +float4 b = tex2D(source, uv); +ret = lerp(ret, b, b.a); +ret = lerp(m,ret,fade); +return ret; +} +float4 frag (v2f i) : COLOR +{ +float4 _ShadowLight_1 = ShadowLight(_MainTex,i.texcoord,_ShadowLight_Precision_1,_ShadowLight_Size_1,_ShadowLight_Color_1,_ShadowLight_Intensity_1,_ShadowLight_PosX_1,_ShadowLight_PosY_1,_ShadowLight_NoSprite_1); +float4 FinalResult = _ShadowLight_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/LightGlow.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/LightGlow.shader.meta new file mode 100644 index 00000000..8891874b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/LightGlow.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 041c3ea843ec4e449a48be4702b425eb +timeCreated: 1542019633 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/LiquidWave.shader b/Assets/2DxFX/ExtraShaders/Shader/LiquidWave.shader new file mode 100644 index 00000000..17742368 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/LiquidWave.shader @@ -0,0 +1,118 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/LiquidWave" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +LiquidUV_WaveX_1("LiquidUV_WaveX_1", Range(0, 2)) = 2 +LiquidUV_WaveY_1("LiquidUV_WaveY_1", Range(0, 2)) = 2 +LiquidUV_DistanceX_1("LiquidUV_DistanceX_1", Range(0, 1)) = 0.3 +LiquidUV_DistanceY_1("LiquidUV_DistanceY_1", Range(0, 1)) = 0.3 +LiquidUV_Speed_1("LiquidUV_Speed_1", Range(-2, 2)) = 1 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float LiquidUV_WaveX_1; +float LiquidUV_WaveY_1; +float LiquidUV_DistanceX_1; +float LiquidUV_DistanceY_1; +float LiquidUV_Speed_1; +float Effect_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 LiquidUV(float2 p, float WaveX, float WaveY, float DistanceX, float DistanceY, float Speed) +{ Speed *= _Time * 100; +float x = sin(p.y * 4 * WaveX + Speed); +float y = cos(p.x * 4 * WaveY + Speed); +x += sin(p.x)*0.1; +y += cos(p.y)*0.1; +x *= y; +y *= x; +x *= y + WaveY*8; +y *= x + WaveX*8; +p.x = p.x + x * DistanceX * 0.015; +p.y = p.y + y * DistanceY * 0.015; + +return p; +} +float4 frag (v2f i) : COLOR +{ +float2 LiquidUV_1 = LiquidUV(i.texcoord,LiquidUV_WaveX_1,LiquidUV_WaveY_1,LiquidUV_DistanceX_1,LiquidUV_DistanceY_1,LiquidUV_Speed_1); +i.texcoord = lerp(i.texcoord,LiquidUV_1,Effect_Fade); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/LiquidWave.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/LiquidWave.shader.meta new file mode 100644 index 00000000..8ebbf32b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/LiquidWave.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d063f1202ccfa6b41a2d5432308127f9 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/MotionBlurFast.shader b/Assets/2DxFX/ExtraShaders/Shader/MotionBlurFast.shader new file mode 100644 index 00000000..695d50af --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/MotionBlurFast.shader @@ -0,0 +1,111 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/MotionBlurFast" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_MotionBlurFast_Angle_1("_MotionBlurFast_Angle_1", Range(-1, 1)) = 0 +_MotionBlurFast_Distance_1("_MotionBlurFast_Distance_1", Range(0, 16)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _MotionBlurFast_Angle_1; +float _MotionBlurFast_Distance_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 MotionBlurFast(sampler2D txt, float2 uv, float angle, float dist) +{ +angle = angle *3.1415926; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float4 r = float4(0, 0, 0, 0); +dist = dist * 0.005; +r += tex2D(txt, uv + rot(float2(-dist, -dist))); +r += tex2D(txt, uv + rot(float2(-dist*2, -dist*2))); +r += tex2D(txt, uv + rot(float2(-dist*3, -dist*3))); +r += tex2D(txt, uv + rot(float2(-dist*4, -dist*4))); +r += tex2D(txt, uv); +r += tex2D(txt, uv + rot(float2( dist, dist))); +r += tex2D(txt, uv + rot(float2( dist*2, dist*2))); +r += tex2D(txt, uv + rot(float2( dist*3, dist*3))); +r += tex2D(txt, uv + rot(float2( dist*4, dist*4))); +r = r/9; +return r; +} +float4 frag (v2f i) : COLOR +{ +float4 _MotionBlurFast_1 = MotionBlurFast(_MainTex,i.texcoord,_MotionBlurFast_Angle_1,_MotionBlurFast_Distance_1); +float4 FinalResult = _MotionBlurFast_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/MotionBlurFast.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/MotionBlurFast.shader.meta new file mode 100644 index 00000000..a92ff9b9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/MotionBlurFast.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f97282f1722a6b24191785c56b80fb50 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/NightVision.shader b/Assets/2DxFX/ExtraShaders/Shader/NightVision.shader new file mode 100644 index 00000000..42a84229 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/NightVision.shader @@ -0,0 +1,101 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/NightVision" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ColorFilters_Fade_1("_ColorFilters_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _ColorFilters_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ColorFilters(float4 rgba, float4 red, float4 green, float4 blue, float fade) +{ +float3 c_r = float3(red.r, red.g, red.b); +float3 c_g = float3(green.r, green.g, green.b); +float3 c_b = float3(blue.r, blue.g, blue.b); +float4 r = float4(dot(rgba.rgb, c_r) + red.a, dot(rgba.rgb, c_g) + green.a, dot(rgba.rgb, c_b) + blue.a, rgba.a); +return lerp(rgba, saturate(r), fade); + +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _ColorFilters_1 = ColorFilters(_MainTex_1,float4(2,-2,-2,-2),float4(1.95,0.04,-1.6,0.1),float4(2,-2,-2,-2),_ColorFilters_Fade_1); +float4 FinalResult = _ColorFilters_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/NightVision.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/NightVision.shader.meta new file mode 100644 index 00000000..f231289c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/NightVision.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a4e8f207e1aebf347a672fbed1bda9ee +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Horizontal.shader b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Horizontal.shader new file mode 100644 index 00000000..6288415e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Horizontal.shader @@ -0,0 +1,105 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/NoiseBlur_Horizontal" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Displacement_Value("Displacement_Value", Range(-0.3, 0.3)) = 0.144 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Displacement_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Generate_Noise(float2 co, float black) +{ +float4 r = frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453); +r.a = saturate(r.a + black); +return r; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Line_1 = Generate_Noise(i.texcoord,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,_Generate_Line_1.r*_Generate_Line_1.a,0,Displacement_Value); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Horizontal.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Horizontal.shader.meta new file mode 100644 index 00000000..01b107e3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Horizontal.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96f538ca3dd288b40adf430ae10ac624 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Vertical.shader b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Vertical.shader new file mode 100644 index 00000000..aea10df1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Vertical.shader @@ -0,0 +1,105 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/NoiseBlur_Vertical" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Displacement_Value("Displacement_Value", Range(-0.3, 0.3)) = 0.144 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Displacement_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Generate_Noise(float2 co, float black) +{ +float4 r = frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453); +r.a = saturate(r.a + black); +return r; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Line_1 = Generate_Noise(i.texcoord,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,0,_Generate_Line_1.g*_Generate_Line_1.a,Displacement_Value); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Vertical.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Vertical.shader.meta new file mode 100644 index 00000000..fb974f38 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/NoiseBlur_Vertical.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d9ac1283fa606574a93d25eb171714a2 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Offset.shader b/Assets/2DxFX/ExtraShaders/Shader/Offset.shader new file mode 100644 index 00000000..806c6e3e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Offset.shader @@ -0,0 +1,114 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Offset" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +OffsetUV_X_1("OffsetUV_X_1", Range(-1, 1)) = 0 +OffsetUV_Y_1("OffsetUV_Y_1", Range(-1, 1)) = 0 +OffsetUV_ZoomX_1("OffsetUV_ZoomX_1", Range(0.1, 10)) = 1 +OffsetUV_ZoomY_1("OffsetUV_ZoomY_1", Range(0.1, 10)) = 1 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float OffsetUV_X_1; +float OffsetUV_Y_1; +float OffsetUV_ZoomX_1; +float OffsetUV_ZoomY_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 OffsetUV(float2 uv, float offsetx, float offsety, float zoomx, float zoomy) +{ +uv += float2(offsetx, offsety); +uv = fmod(uv * float2(zoomx, zoomy), 1); +return uv; +} + +float2 OffsetUVClamp(float2 uv, float offsetx, float offsety, float zoomx, float zoomy) +{ +uv += float2(offsetx, offsety); +uv = fmod(clamp(uv * float2(zoomx, zoomy), 0.0001, 0.9999), 1); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 OffsetUV_1 = OffsetUV(i.texcoord,OffsetUV_X_1,OffsetUV_Y_1,OffsetUV_ZoomX_1,OffsetUV_ZoomY_1); +i.texcoord = lerp(i.texcoord,OffsetUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Offset.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Offset.shader.meta new file mode 100644 index 00000000..23f2efb1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Offset.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f6390e3c458302344aee9fbdddd85778 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Outline.shader b/Assets/2DxFX/ExtraShaders/Shader/Outline.shader new file mode 100644 index 00000000..cf98a158 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Outline.shader @@ -0,0 +1,111 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Outline" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Outline_Size_1("_Outline_Size_1", Range(1, 16)) = 1 +_Outline_Color_1("_Outline_Color_1", COLOR) = (1,1,1,1) +_Outline_HDR_1("_Outline_HDR_1", Range(0, 2)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Outline_Size_1; +float4 _Outline_Color_1; +float _Outline_HDR_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 OutLine(float2 uv,sampler2D source, float value, float4 color, float HDR) +{ + +value*=0.01; +float4 mainColor = tex2D(source, uv + float2(-value, value)) ++ tex2D(source, uv + float2(value, -value)) ++ tex2D(source, uv + float2(value, value)) ++ tex2D(source, uv - float2(value, value)); + +color *= HDR; +mainColor.rgb = color; +float4 addcolor = tex2D(source, uv); +if (mainColor.a > 0.40) { mainColor = color; } +if (addcolor.a > 0.40) { mainColor = addcolor; mainColor.a = addcolor.a; } +return mainColor; +} +float4 frag (v2f i) : COLOR +{ +float4 _Outline_1 = OutLine(i.texcoord,_MainTex,_Outline_Size_1,_Outline_Color_1,_Outline_HDR_1); +float4 FinalResult = _Outline_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Outline.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Outline.shader.meta new file mode 100644 index 00000000..a97f4593 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Outline.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c55ac620ffcb93c45acc8208663b6736 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/OutlineEmpty.shader b/Assets/2DxFX/ExtraShaders/Shader/OutlineEmpty.shader new file mode 100644 index 00000000..5a2f06d8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/OutlineEmpty.shader @@ -0,0 +1,108 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/OutlineEmpty" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_OutlineEmpty_Size_1("_OutlineEmpty_Size_1", Range(1, 16)) = 16.0 +_OutlineEmpty_Color_1("_OutlineEmpty_Color_1", COLOR) = (1,1,1,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _OutlineEmpty_Size_1; +float4 _OutlineEmpty_Color_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 OutLineEmpty(float2 uv,sampler2D source, float value, float4 color) +{ + +value*=0.01; +float4 mainColor = tex2D(source, uv + float2(-value, value)) ++ tex2D(source, uv + float2(value, -value)) ++ tex2D(source, uv + float2(value, value)) ++ tex2D(source, uv - float2(value, value)); + +mainColor.rgb = color; +float4 addcolor = tex2D(source, uv); +if (mainColor.a > 0.40) { mainColor = color; } +if (addcolor.a > 0.40) { mainColor.a = 0; } +return mainColor; +} +float4 frag (v2f i) : COLOR +{ +float4 _OutlineEmpty_1 = OutLineEmpty(i.texcoord,_MainTex,_OutlineEmpty_Size_1,_OutlineEmpty_Color_1); +float4 FinalResult = _OutlineEmpty_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/OutlineEmpty.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/OutlineEmpty.shader.meta new file mode 100644 index 00000000..c37c07a0 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/OutlineEmpty.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bf9f07460f756294b9592cfd2cd27545 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Perspective3D.shader b/Assets/2DxFX/ExtraShaders/Shader/Perspective3D.shader new file mode 100644 index 00000000..5cc23ee8 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Perspective3D.shader @@ -0,0 +1,121 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Perspective3D" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Make3DFX_Dist_1("_Make3DFX_Dist_1", Range(-1, 1)) = 0.5 +_Make3DFX_Size_1("_Make3DFX_Size_1", Range(1, 16)) = 16 +_Make3DFX_PosX_1("_Make3DFX_PosX_1", Range(-2, 2)) = 0.3 +_Make3DFX_PosY_1("_Make3DFX_PosY_1", Range(-2, 2)) = 0.2 +_Make3DFX_Light_1("_Make3DFX_Light_1", Range(-2, 2)) = 0.2 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Make3DFX_Dist_1; +float _Make3DFX_Size_1; +float _Make3DFX_PosX_1; +float _Make3DFX_PosY_1; +float _Make3DFX_Light_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Make3DFX(sampler2D smp, float2 uv,float dist, float size, float x, float y, float light) +{ +float4 overlay = float4(0, 0, 0, 1); +float4 origin = tex2D(smp, uv); +dist *= 0.03; +for (int i = 0; i < size; i++) +{ +uv.x += dist*x; +uv.y += dist*y; +float4 o= float4(0, 0, 0, 1); +overlay = tex2D(smp, uv); +float z = i / size; +origin.rgb = origin.rgb = lerp(origin.rgb +(light/size)*2, origin.rgb, z); +origin = saturate(origin); +o.a = overlay.a + origin.a * (1 - overlay.a); +o.rgb = (overlay.rgb * overlay.a + origin.rgb * origin.a * (1 - overlay.a)) / (o.a+0.0000001); +o.a = saturate(o.a); +o = lerp(origin, o, 1); +origin = o; +} +return origin; +} +float4 frag (v2f i) : COLOR +{ +float4 _Make3DFX_1 = Make3DFX(_MainTex,i.texcoord,_Make3DFX_Dist_1,_Make3DFX_Size_1,_Make3DFX_PosX_1,_Make3DFX_PosY_1,_Make3DFX_Light_1); +float4 FinalResult = _Make3DFX_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Perspective3D.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Perspective3D.shader.meta new file mode 100644 index 00000000..c65ca7cf --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Perspective3D.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 049a16c6bc92f734c80934ed78783d84 +timeCreated: 1542019633 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Pinch.shader b/Assets/2DxFX/ExtraShaders/Shader/Pinch.shader new file mode 100644 index 00000000..d4169188 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Pinch.shader @@ -0,0 +1,105 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Pinch" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +PinchUV_Size_1("PinchUV_Size_1", Range(0, 0.5)) = 0.25 +Effect_Fade("Effect_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float PinchUV_Size_1; +float Effect_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 PinchUV(float2 uv, float size) +{ +float2 m = float2(0.5, 0.5); +float2 d = uv - m; +float r = sqrt(dot(d, d)); +float power = (2.0 * 3.141592 / (2.0 * sqrt(dot(m, m)))) * (-size+0.001); +float bind = 0.5; +uv = m + normalize(d) * atan(r * -power * 10.0) * bind / atan(-power * bind * 10.0); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PinchUV_1 = PinchUV(i.texcoord,PinchUV_Size_1); +i.texcoord = lerp(i.texcoord,PinchUV_1,Effect_Fade); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Pinch.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Pinch.shader.meta new file mode 100644 index 00000000..61a2ec45 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Pinch.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 43c6716f2ab4330448d6ffc6dac59da1 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/PixelExplosion.shader b/Assets/2DxFX/ExtraShaders/Shader/PixelExplosion.shader new file mode 100644 index 00000000..ecc3239b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/PixelExplosion.shader @@ -0,0 +1,125 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/PixelExplosion" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Pixel_Size("Pixel_Size", Range(1, 128)) = 79 +ExplosionValue("ExplosionValue", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Pixel_Size; +float ExplosionValue; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 ZoomUV(float2 uv, float zoom, float posx, float posy) +{ +float2 center = float2(posx, posy); +uv -= center; +uv = uv * zoom; +uv += center; +return uv; +} +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float4 Generate_Noise(float2 co, float black) +{ +float4 r = frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453); +r.a = saturate(r.a + black); +return r; +} +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,Pixel_Size); +float2 ZoomUV_1 = ZoomUV(PixelUV_1,0.551,0.5,0.5); +float4 _Generate_Noise_1 = Generate_Noise(PixelUV_1,0); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(ZoomUV_1,_Generate_Noise_1,0.3,0.733); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,ExplosionValue); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/PixelExplosion.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/PixelExplosion.shader.meta new file mode 100644 index 00000000..9f93ebaf --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/PixelExplosion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0e6e4d21baf68d04a872086a6e089dc6 +timeCreated: 1542019633 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/PixelGravityDie.shader b/Assets/2DxFX/ExtraShaders/Shader/PixelGravityDie.shader new file mode 100644 index 00000000..f5fcf109 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/PixelGravityDie.shader @@ -0,0 +1,132 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/PixelGravityDie" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +PixelUV_Size("PixelUV_Size", Range(1, 128)) = 128 +Pixel_Fade("Pixel_Fade", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float PixelUV_Size; +float Pixel_Fade; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float2 ResizeUV(float2 uv, float offsetx, float offsety, float zoomx, float zoomy) +{ +uv += float2(offsetx, offsety); +uv = fmod(uv * float2(zoomx*zoomx, zoomy*zoomy), 1); +return uv; +} + +float2 ResizeUVClamp(float2 uv, float offsetx, float offsety, float zoomx, float zoomy) +{ +uv += float2(offsetx, offsety); +uv = fmod(clamp(uv * float2(zoomx*zoomx, zoomy*zoomy), 0.0001, 0.9999), 1); +return uv; +} +float4 Generate_Noise(float2 co, float black) +{ +float4 r = frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453); +r.a = saturate(r.a + black); +return r; +} +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 ResizeUV_1 = ResizeUVClamp(i.texcoord,0,-0.159,1,3); +float2 PixelUV_1 = PixelUV(i.texcoord,PixelUV_Size); +float4 _Generate_Noise_1 = Generate_Noise(PixelUV_1,0); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(ResizeUV_1,_Generate_Noise_1,0.3,0.232); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Pixel_Fade); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/PixelGravityDie.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/PixelGravityDie.shader.meta new file mode 100644 index 00000000..bfdb2a2f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/PixelGravityDie.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 70d75664cea27174388abd94cd6f75a8 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Pixelisation.shader b/Assets/2DxFX/ExtraShaders/Shader/Pixelisation.shader new file mode 100644 index 00000000..409d7ce2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Pixelisation.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Pixelisation" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +PixelUV_Size_1("PixelUV_Size_1", Range(1, 128)) = 31 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float PixelUV_Size_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,PixelUV_Size_1); +float4 _MainTex_1 = tex2D(_MainTex,PixelUV_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Pixelisation.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Pixelisation.shader.meta new file mode 100644 index 00000000..fc3222fb --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Pixelisation.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2a42586fa794a324583d1b743990c4bb +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/PixelisationXY.shader b/Assets/2DxFX/ExtraShaders/Shader/PixelisationXY.shader new file mode 100644 index 00000000..b676da50 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/PixelisationXY.shader @@ -0,0 +1,103 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/PixelisationXY" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +PixelXYUV_SizeX_1("PixelXYUV_SizeX_1", Range(1, 128)) = 32 +PixelXYUV_SizeY_1("PixelXYUV_SizeY_1", Range(1, 128)) = 32 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float PixelXYUV_SizeX_1; +float PixelXYUV_SizeY_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 PixelXYUV(float2 uv, float x, float y) +{ +float2 pos = float2(x, y); +uv = floor(uv * pos+0.5) / pos; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelXYUV_1 = PixelXYUV(i.texcoord,PixelXYUV_SizeX_1,PixelXYUV_SizeY_1); +i.texcoord = lerp(i.texcoord,PixelXYUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/PixelisationXY.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/PixelisationXY.shader.meta new file mode 100644 index 00000000..f974b3e4 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/PixelisationXY.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 05b5cd5b52404154dac382cb03b0e28b +timeCreated: 1542019633 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Plasma.shader b/Assets/2DxFX/ExtraShaders/Shader/Plasma.shader new file mode 100644 index 00000000..638fd29d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Plasma.shader @@ -0,0 +1,124 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Plasma" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_PlasmaFX_Fade_1("_PlasmaFX_Fade_1", Range(0, 1)) = 0.5 +_PlasmaFX_Speed_1("_PlasmaFX_Speed_1", Range(0, 1)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _PlasmaFX_Fade_1; +float _PlasmaFX_Speed_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float RBFXmod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +float3 RBFXrainbow(float t) +{ +t= RBFXmod(t,1.0); +float tx = t * 8; +float r = clamp(tx - 4.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); +float g = tx < 2.0 ? clamp(tx, 0.0, 1.0) : clamp(4.0 - tx, 0.0, 1.0); +float b = tx < 4.0 ? clamp(tx - 2.0, 0.0, 1.0) : clamp(6.0 - tx, 0.0, 1.0); +return float3(r, g, b); +} + +float4 Plasma(float4 txt, float2 uv, float _Fade, float speed) +{ +float _TimeX=_Time.y * speed; +float a = 1.1 + _TimeX * 2.25; +float b = 0.5 + _TimeX * 1.77; +float c = 8.4 + _TimeX * 1.58; +float d = 610 + _TimeX * 2.03; +float x1 = 2.0 * uv.x; +float n = sin(a + x1) + sin(b - x1) + sin(c + 2.0 * uv.y) + sin(d + 5.0 * uv.y); +n = RBFXmod(((5.0 + n) / 5.0), 1.0); +float4 nx=txt; +n += nx.r * 0.2 + nx.g * 0.4 + nx.b * 0.2; +float4 ret=float4(RBFXrainbow(n),txt.a); +return lerp(txt,ret,_Fade); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _PlasmaFX_1 = Plasma(_MainTex_1,i.texcoord,_PlasmaFX_Fade_1,_PlasmaFX_Speed_1); +float4 FinalResult = _PlasmaFX_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Plasma.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Plasma.shader.meta new file mode 100644 index 00000000..9dadb65f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Plasma.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 36b5905494e89644186abc68a646553b +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Repeat.shader b/Assets/2DxFX/ExtraShaders/Shader/Repeat.shader new file mode 100644 index 00000000..962bf090 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Repeat.shader @@ -0,0 +1,91 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Repeat" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Repeat("Repeat", Range(1, 1024)) = 2 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Repeat; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord*Repeat); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Repeat.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Repeat.shader.meta new file mode 100644 index 00000000..5f4ffcb5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Repeat.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f6fefeda4f5dc5c4cac887c9a3e4830c +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroC64.shader b/Assets/2DxFX/ExtraShaders/Shader/RetroC64.shader new file mode 100644 index 00000000..2f9ee9f1 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroC64.shader @@ -0,0 +1,115 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/RetroC64" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnC64_Fade_1("_TurnC64_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnC64_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 TurnC64(float4 txt, float value) +{ +float3 a = float3(0, 0, 0); +#define Turn(n) a = lerp(n, a, step (length (a-txt.rgb), length (n-txt.rgb))); +Turn(float3(0, 0, 0)); +Turn(float3(1, 1, 1)); +Turn(float3(116, 67, 53) / 256); +Turn(float3(124, 172, 186) / 256); +Turn(float3(123, 72, 144) / 256); +Turn(float3(100, 151, 79) / 256); +Turn(float3(64, 50, 133) / 256); +Turn(float3(191, 205, 122) / 256); +Turn(float3(123, 91, 47) / 256); +Turn(float3(79, 69, 0) / 256); +Turn(float3(163, 114, 101) / 256); +Turn(float3(80, 80, 80) / 256); +Turn(float3(120, 120, 120) / 256); +Turn(float3(164, 215, 142) / 256); +Turn(float3(120, 106, 189) / 256); +Turn(float3(159, 159, 150) / 256); +a = lerp(txt.rgb,a,value); +return float4(a, txt.a); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 TurnC64_1 = TurnC64(_MainTex_1,_TurnC64_Fade_1); +float4 FinalResult = TurnC64_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroC64.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/RetroC64.shader.meta new file mode 100644 index 00000000..06d80a24 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroC64.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6ab181dfb50c5fb4b97059152dee66ea +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroCGA.shader b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA.shader new file mode 100644 index 00000000..e76d1d16 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA.shader @@ -0,0 +1,103 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/RetroCGA" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnCGA_Fade_1("_TurnCGA_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnCGA_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 TurnCGA(float4 txt, float value) +{ +float3 a = float3(0, 0, 0); +#define Turn(n) a = lerp(n, a, step (length (a-txt.rgb), length (n-txt.rgb))); +Turn(float3(0, 0, 0)); +Turn(float3(0.33, 1, 1)); +Turn(float3(1, 0.33, 1)); +Turn(float3(1, 1, 1)); +a = lerp(txt.rgb,a,value); +return float4(a, txt.a); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 TurnCGA_1 = TurnCGA(_MainTex_1,_TurnCGA_Fade_1); +float4 FinalResult = TurnCGA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroCGA.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA.shader.meta new file mode 100644 index 00000000..babfaabe --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d737a86d1c85e414d9d38f322165f481 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroCGA2.shader b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA2.shader new file mode 100644 index 00000000..576e4eea --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA2.shader @@ -0,0 +1,103 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/RetroCGA2" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnCGA2_Fade_1("_TurnCGA2_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnCGA2_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 TurnCGA2(float4 txt, float value) +{ +float3 a = float3(0, 0, 0); +#define Turn(n) a = lerp(n, a, step (length (a-txt.rgb), length (n-txt.rgb))); +Turn(float3(0, 0, 0)); +Turn(float3(0.33, 1, 0.33)); +Turn(float3(1, 0.33, 0.33)); +Turn(float3(1, 1, 0.33)); +a = lerp(txt.rgb,a,value); +return float4(a, txt.a); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 TurnCGA2_1 = TurnCGA2(_MainTex_1,_TurnCGA2_Fade_1); +float4 FinalResult = TurnCGA2_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroCGA2.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA2.shader.meta new file mode 100644 index 00000000..18530a6a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroCGA2.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9838fdc97e5ab944697dc5110c2256fa +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroEGA.shader b/Assets/2DxFX/ExtraShaders/Shader/RetroEGA.shader new file mode 100644 index 00000000..46181685 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroEGA.shader @@ -0,0 +1,115 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/RetroEGA" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnEGA_Fade_1("_TurnEGA_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnEGA_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 TurnEGA(float4 txt, float value) +{ +float3 a = float3(0, 0, 0); +#define Turn(n) a = lerp(n, a, step (length (a-txt.rgb), length (n-txt.rgb))); +Turn(float3(000.0, 000.0, 000.0) / 256); +Turn(float3(255.0, 255.0, 255.0) / 256); +Turn(float3(255.0, 0.0, 0.0) / 256); +Turn(float3(0.0, 255.0, 0.0) / 256); +Turn(float3(0.0, 0.0, 255.0) / 256); +Turn(float3(255.0, 255.0, 0.0) / 256); +Turn(float3(0.0, 255.0, 255.0) / 256); +Turn(float3(255.0, 0.0, 255.0) / 256); +Turn(float3(128.0, 0.0, 0.0) / 256); +Turn(float3(0.0, 128.0, 0.0) / 256); +Turn(float3(0.0, 0.0, 128.0) / 256); +Turn(float3(128.0, 128.0, 0.0) / 256); +Turn(float3(0.0, 128.0, 128.0) / 256); +Turn(float3(128.0, 0.0, 128.0) / 256); +Turn(float3(128.0, 128.0, 128.0) / 256); +Turn(float3(255.0, 128.0, 128.0) / 256); +a = lerp(txt.rgb,a,value); +return float4(a, txt.a); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 TurnEGA_1 = TurnEGA(_MainTex_1,_TurnEGA_Fade_1); +float4 FinalResult = TurnEGA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroEGA.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/RetroEGA.shader.meta new file mode 100644 index 00000000..4e1a1129 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroEGA.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8412bcf8a08f6364bac175aa75c7f339 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroGB.shader b/Assets/2DxFX/ExtraShaders/Shader/RetroGB.shader new file mode 100644 index 00000000..3883c8a3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroGB.shader @@ -0,0 +1,103 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/RetroGB" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnGB_Fade_1("_TurnGB_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnGB_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 TurnGB(float4 txt, float value) +{ +float3 a = float3(0, 0, 0); +#define Turn(n) a = lerp(n, a, step (length (a-txt.rgb), length (n-txt.rgb))); +Turn(float3(0.609375, 0.73828125, 0.058593)); +Turn(float3(0.546875, 0.67578125, 0.058593)); +Turn(float3(0.1875, 0.3828125, 0.1875)); +Turn(float3(0.058593, 0.21875, 0.058593)); +a = lerp(txt.rgb,a,value); +return float4(a, txt.a); +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 TurnGB_1 = TurnGB(_MainTex_1,_TurnGB_Fade_1); +float4 FinalResult = TurnGB_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/RetroGB.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/RetroGB.shader.meta new file mode 100644 index 00000000..becb2224 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RetroGB.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e6761d168b72f2d499b161bbb0c19e17 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/RoarDistortion.shader b/Assets/2DxFX/ExtraShaders/Shader/RoarDistortion.shader new file mode 100644 index 00000000..d50c40b5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RoarDistortion.shader @@ -0,0 +1,120 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/RoarDistortion" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +PosX("PosX", Range(0, 1)) = 0.5 +PosY("PosY", Range(0, 1)) = 0.5 +Size("Size", Range(0, 2)) = 1 +LineSize("LineSize", Range(-16, 16)) = 1 +Speed("Speed", Range(-2, 2)) = 0 +Roar_Intensity("Roar_Intensity", Range(-0.3, 0.3)) = 0.022 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float PosX; +float PosY; +float Size; +float LineSize; +float Speed; +float Roar_Intensity; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Generate_Spiral(float2 uv, float posX, float posY, float Size, float LineSize, float Speed,float black) +{ +float t = _Time*Speed*8; +float2 m = float2(posX, posY) - uv; +float r = length(m)*Size; +float a = atan2(m.y, m.x); +float v = sin(100.* (sqrt(r) - (0.02*LineSize) * a - .3 * t)); +float4 result = clamp(v, 0., 1.); +result.a = saturate(result.a + black); +return result; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Spiral_1 = Generate_Spiral(i.texcoord,PosX,PosY,Size,LineSize,Speed,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,_Generate_Spiral_1.r*_Generate_Spiral_1.a,0,Roar_Intensity); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/RoarDistortion.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/RoarDistortion.shader.meta new file mode 100644 index 00000000..cfad9579 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/RoarDistortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dd702c23ee76e8c4db43b78cbbe5509e +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Shake.shader b/Assets/2DxFX/ExtraShaders/Shader/Shake.shader new file mode 100644 index 00000000..3fe954d5 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Shake.shader @@ -0,0 +1,109 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Shake" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Offset_X("Offset_X", Range(0, 0.05)) = 0 +Offset_Y("Offset_Y", Range(0, 0.05)) = 0.004 +Intensity_X("Intensity_X", Range(-3, 3)) = 1 +Intensity_Y("Intensity_Y", Range(-3, 3)) = 1 +Speed("Speed", Range(-1, 1)) = 0.161 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Offset_X; +float Offset_Y; +float Intensity_X; +float Intensity_Y; +float Speed; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedShakeUV(float2 uv, float offsetx, float offsety, float zoomx, float zoomy, float speed) +{ +float time = sin(_Time * speed * 5000 * zoomx); +float time2 = sin(_Time * speed * 5000 * zoomy); +uv += float2(offsetx * time, offsety * time2); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedShakeUV_1 = AnimatedShakeUV(i.texcoord,Offset_X,Offset_Y,Intensity_X,Intensity_Y,Speed); +float4 _MainTex_1 = tex2D(_MainTex,AnimatedShakeUV_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Shake.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Shake.shader.meta new file mode 100644 index 00000000..38b74f51 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Shake.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 74ecf4602f4684c43ac3606ad131e05f +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Sharpness.shader b/Assets/2DxFX/ExtraShaders/Shader/Sharpness.shader new file mode 100644 index 00000000..97a6deef --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Sharpness.shader @@ -0,0 +1,127 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Sharpness" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Sharpness_Angle_1("_Sharpness_Angle_1", Range(-1, 1)) = 0.25 +_Sharpness_Distance_1("_Sharpness_Distance_1", Range(0, 16)) = 2.257 +_Sharpness_Intensity_1("_Sharpness_Intensity_1", Range(-2, 2)) = 0.279 +_Sharpness_Fade_1("_Sharpness_Fade_1", Range(-2, 2)) = 1 +_Sharpness_original_1("_Sharpness_original_1", Range(-2, 2)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Sharpness_Angle_1; +float _Sharpness_Distance_1; +float _Sharpness_Intensity_1; +float _Sharpness_Fade_1; +float _Sharpness_original_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Sharpness(sampler2D txt, float2 uv, float angle, float dist, float intensity, float g, float o) +{ +angle = angle *3.1415926; +intensity = intensity *0.25; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float m1 = 0; float m2 = -1; float m3 = 0; +float m4 = -1; float m5 = 5; float m6 = -1; +float m7 = 0; float m8 = -1; float m9 = 0; +float Offset = 0.5; +float Scale = 1; +float4 r = float4(0, 0, 0, 0); +dist = dist * 0.005; +float4 rgb = tex2D(txt, uv); +r += tex2D(txt, uv + rot(float2(-dist, -dist))) * m1*intensity; +r += tex2D(txt, uv + rot(float2(0, -dist))) * m2*intensity; +r += tex2D(txt, uv + rot(float2(dist, -dist))) * m3*intensity; +r += tex2D(txt, uv + rot(float2(-dist, 0))) * m4*intensity; +r += tex2D(txt, uv + rot(float2(0, 0))) * m5*intensity; +r += tex2D(txt, uv + rot(float2(dist, 0))) * m6*intensity; +r += tex2D(txt, uv + rot(float2(-dist, dist))) * m7*intensity; +r += tex2D(txt, uv + rot(float2(0, dist))) * m8*intensity; +r += tex2D(txt, uv + rot(float2(dist, dist))) * m9*intensity; +r = lerp(r,dot(r.rgb,3),g); +r = lerp(r+0.5,rgb+r,o); +r = saturate(r); +r.a = rgb.a; +return r; +} +float4 frag (v2f i) : COLOR +{ +float4 _Sharpness_1 = Sharpness(_MainTex,i.texcoord,_Sharpness_Angle_1,_Sharpness_Distance_1,_Sharpness_Intensity_1,_Sharpness_Fade_1,_Sharpness_original_1); +float4 FinalResult = _Sharpness_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Sharpness.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Sharpness.shader.meta new file mode 100644 index 00000000..68d7789c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Sharpness.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3e45fcdb1696f8f4994f55f37b85c49a +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ShinyFX.shader b/Assets/2DxFX/ExtraShaders/Shader/ShinyFX.shader new file mode 100644 index 00000000..15b0e68b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ShinyFX.shader @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ShinyFX" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ShinyFX_Pos_1("_ShinyFX_Pos_1", Range(-1, 1)) = 0 +_ShinyFX_Size_1("_ShinyFX_Size_1", Range(-1, 1)) = -0.1 +_ShinyFX_Smooth_1("_ShinyFX_Smooth_1", Range(0, 1)) = 0.25 +_ShinyFX_Intensity_1("_ShinyFX_Intensity_1", Range(0, 4)) = 1 +_ShinyFX_Speed_1("_ShinyFX_Speed_1", Range(0, 8)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _ShinyFX_Pos_1; +float _ShinyFX_Size_1; +float _ShinyFX_Smooth_1; +float _ShinyFX_Intensity_1; +float _ShinyFX_Speed_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ShinyFX(float4 txt, float2 uv, float pos, float size, float smooth, float intensity, float speed) +{ +pos = pos + 0.5+sin(_Time*20*speed)*0.5; +uv = uv - float2(pos, 0.5); +float a = atan2(uv.x, uv.y) + 1.4, r = 3.1415; +float d = cos(floor(0.5 + a / r) * r - a) * length(uv); +float dist = 1.0 - smoothstep(size, size + smooth, d); +txt.rgb += dist*intensity; +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _ShinyFX_1 = ShinyFX(_MainTex_1,i.texcoord,_ShinyFX_Pos_1,_ShinyFX_Size_1,_ShinyFX_Smooth_1,_ShinyFX_Intensity_1,_ShinyFX_Speed_1); +float4 FinalResult = _ShinyFX_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ShinyFX.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ShinyFX.shader.meta new file mode 100644 index 00000000..0c14dc73 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ShinyFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: db76a7109bf66fd41ba25c7bcd903030 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ShinyPixel.shader b/Assets/2DxFX/ExtraShaders/Shader/ShinyPixel.shader new file mode 100644 index 00000000..3f56b241 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ShinyPixel.shader @@ -0,0 +1,118 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ShinyPixel" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 +Pixel_Size("Pixel_Size", Range(1, 128)) = 22 +Displacement_Value("Displacement_Value", Range(-0.3, 0.3)) = 0.3 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma multi_compile _ PIXELSNAP_ON +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Pixel_Size; +float Displacement_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 ShinyOnlyFX(float2 uv, float pos, float size, float smooth, float intensity, float speed) +{ +pos = pos + 0.5+sin(_Time*20*speed)*0.5; +uv = uv - float2(pos, 0.5); +float a = atan2(uv.x, uv.y) + 1.4, r = 3.1415; +float d = cos(floor(0.5 + a / r) * r - a) * length(uv); +float dist = 1.0 - smoothstep(size, size + smooth, d); +return dist*intensity; +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,Pixel_Size); +float4 _ShinyOnlyFX_1 = ShinyOnlyFX(PixelUV_1,0,-0.1,0.25,1,1); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,_ShinyOnlyFX_1.r*_ShinyOnlyFX_1.a,0,Displacement_Value); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ShinyPixel.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ShinyPixel.shader.meta new file mode 100644 index 00000000..017718b2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ShinyPixel.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 706845714369ad7459477c6c31868cb2 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortion.shader b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortion.shader new file mode 100644 index 00000000..633772ea --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortion.shader @@ -0,0 +1,144 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/SymbioseDistortion" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Symbiose_Distance("Symbiose_Distance", Range(-0.3, 0.3)) = 0.215 +Symbiose_Position("Symbiose_Position", Range(-1, 1)) = -0.249 +Effect_Fading("Effect_Fading", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Symbiose_Distance; +float Symbiose_Position; +float Effect_Fading; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float Generate_Fire_hash2D(float2 x) +{ +return frac(sin(dot(x, float2(13.454, 7.405)))*12.3043); +} + +float Generate_Fire_voronoi2D(float2 uv, float precision) +{ +float2 fl = floor(uv); +float2 fr = frac(uv); +float res = 1.0; +for (int j = -1; j <= 1; j++) +{ +for (int i = -1; i <= 1; i++) +{ +float2 p = float2(i, j); +float h = Generate_Fire_hash2D(fl + p); +float2 vp = p - fr + h; +float d = dot(vp, vp); +res += 1.0 / pow(d, 8.0); +} +} +return pow(1.0 / res, precision); +} + +float4 Generate_Fire(float2 uv, float posX, float posY, float precision, float smooth, float speed, float black) +{ +uv += float2(posX, posY); +float t = _Time*60*speed; +float up0 = Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(0, -t), precision); +float up1 = 0.5 + Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(42, -t ) + 30.0, precision); +float finalMask = up0 * up1 + (1.0 - uv.y); +finalMask += (1.0 - uv.y)* 0.5; +finalMask *= 0.7 - abs(uv.x - 0.5); +float4 result = smoothstep(smooth, 0.95, finalMask); +result.a = saturate(result.a + black); +return result; +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Fire_1 = Generate_Fire(i.texcoord,-0.024,0.052,0.05,0.5,1,0); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Generate_Fire_1,Symbiose_Distance,Symbiose_Position); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Effect_Fading); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +SourceRGBA_1.a = lerp(float4(1,1,0,1).a * SourceRGBA_1.a, (1 - float4(1,1,0,1).a) * SourceRGBA_1.a,0); +float4 FinalResult = SourceRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortion.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortion.shader.meta new file mode 100644 index 00000000..2f0de10b --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 73ada674d174bb04ea7c87563210fa61 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortionFix.shader b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortionFix.shader new file mode 100644 index 00000000..39f2aeb2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortionFix.shader @@ -0,0 +1,144 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/SymbioseDistortion" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Symbiose_Distance("Symbiose_Distance", Range(-0.3, 0.3)) = 0.215 +Symbiose_Position("Symbiose_Position", Range(-1, 1)) = -0.249 +Effect_Fading("Effect_Fading", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Symbiose_Distance; +float Symbiose_Position; +float Effect_Fading; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 SimpleDisplacementRotativeUV(float2 uv, float4 rgba, float value, float value2) +{ +float angle = value2 * 3.1415926; +float dist = rgba.r; +#define rot(n) mul(n, float2x2(cos(angle), -sin(angle), sin(angle), cos(angle))) +float2 uv2 = uv+rot(float2(dist-0.5, dist-0.5)); +return lerp(uv, uv2, value); +} +float Generate_Fire_hash2D(float2 x) +{ +return frac(sin(dot(x, float2(13.454, 7.405)))*12.3043); +} + +float Generate_Fire_voronoi2D(float2 uv, float precision) +{ +float2 fl = floor(uv); +float2 fr = frac(uv); +float res = 1.0; +for (int j = -1; j <= 1; j++) +{ +for (int i = -1; i <= 1; i++) +{ +float2 p = float2(i, j); +float h = Generate_Fire_hash2D(fl + p); +float2 vp = p - fr + h; +float d = dot(vp, vp); +res += 1.0 / pow(d, 8.0); +} +} +return pow(1.0 / res, precision); +} + +float4 Generate_Fire(float2 uv, float posX, float posY, float precision, float smooth, float speed, float black) +{ +uv += float2(posX, posY); +float t = 1; +float up0 = Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(0, -t), precision); +float up1 = 0.5 + Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(42, -t ) + 30.0, precision); +float finalMask = up0 * up1 + (1.0 - uv.y); +finalMask += (1.0 - uv.y)* 0.5; +finalMask *= 0.7 - abs(uv.x - 0.5); +float4 result = smoothstep(smooth, 0.95, finalMask); +result.a = saturate(result.a + black); +return result; +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Fire_1 = Generate_Fire(i.texcoord,-0.024,0.052,0.05,0.5,1,0); +float2 _Simple_Displacement_Rotative_1 = SimpleDisplacementRotativeUV(i.texcoord,_Generate_Fire_1,Symbiose_Distance,Symbiose_Position); +i.texcoord = lerp(i.texcoord,_Simple_Displacement_Rotative_1,Effect_Fading); +float4 SourceRGBA_1 = tex2D(_MainTex, i.texcoord); +SourceRGBA_1.a = lerp(float4(1,1,0,1).a * SourceRGBA_1.a, (1 - float4(1,1,0,1).a) * SourceRGBA_1.a,0); +float4 FinalResult = SourceRGBA_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortionFix.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortionFix.shader.meta new file mode 100644 index 00000000..de4fb5c3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/SymbioseDistortionFix.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3012c1f80e8db2f408db03a9ecd8c101 +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Threshold.shader b/Assets/2DxFX/ExtraShaders/Shader/Threshold.shader new file mode 100644 index 00000000..4f38f49d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Threshold.shader @@ -0,0 +1,98 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Threshold" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Threshold_Fade_1("_Threshold_Fade_1", Range(0, 1)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Threshold_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 Threshold(float4 txt, float value) +{ +float l = (txt.x + txt.y + txt.z) * 0.33; +txt.rgb = smoothstep(value, value +0.0001, l); +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 Threshold_1 = Threshold(_MainTex_1,_Threshold_Fade_1); +float4 FinalResult = Threshold_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Threshold.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Threshold.shader.meta new file mode 100644 index 00000000..26959330 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Threshold.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: db57356aed97b4042bf18648f181f097 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/ThresholdSmooth.shader b/Assets/2DxFX/ExtraShaders/Shader/ThresholdSmooth.shader new file mode 100644 index 00000000..673b861c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ThresholdSmooth.shader @@ -0,0 +1,100 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/ThresholdSmooth" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ThresholdSmooth_Value_1("_ThresholdSmooth_Value_1", Range(0, 1)) = 0.5 +_ThresholdSmooth_Smooth_1("_ThresholdSmooth_Smooth_1", Range(0, 1)) = 0.5 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _ThresholdSmooth_Value_1; +float _ThresholdSmooth_Smooth_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ThresholdSmooth(float4 txt, float value, float smooth) +{ +float l = (txt.x + txt.y + txt.z) * 0.33; +txt.rgb = smoothstep(value, value + smooth, l); +return txt; +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _ThresholdSmooth_1 = ThresholdSmooth(_MainTex_1,_ThresholdSmooth_Value_1,_ThresholdSmooth_Smooth_1); +float4 FinalResult = _ThresholdSmooth_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/ThresholdSmooth.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/ThresholdSmooth.shader.meta new file mode 100644 index 00000000..5d8677e3 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/ThresholdSmooth.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e8ac8964a9509cb4f9922b211bbbe332 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Tilt_Down.shader b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Down.shader new file mode 100644 index 00000000..5292d1ac --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Down.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Tilt_Down" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +TiltDownUV_TiltDownUV_Value_1("TiltDownUV_TiltDownUV_Value_1", Range(-2, 2)) = 0.193 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float TiltDownUV_TiltDownUV_Value_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 TiltDownUV(float2 uv, float offsetX) +{ +uv += float2(offsetX*(1-uv.y), 0); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 TiltDownUV_1 = TiltDownUV(i.texcoord,TiltDownUV_TiltDownUV_Value_1); +float4 _MainTex_1 = tex2D(_MainTex,TiltDownUV_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Tilt_Down.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Down.shader.meta new file mode 100644 index 00000000..37841385 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Down.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a66674fe644f9c944b85d0be884b6d99 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Tilt_Left.shader b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Left.shader new file mode 100644 index 00000000..370aa243 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Left.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Tilt_Left" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +TiltLeftUV_TiltLeftUV_Value_1("TiltLeftUV_TiltLeftUV_Value_1", Range(-2, 2)) = 0.193 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float TiltLeftUV_TiltLeftUV_Value_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 TiltLeftUV(float2 uv, float offsetY) +{ +uv += float2(0, offsetY*uv.x); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 TiltLeftUV_1 = TiltLeftUV(i.texcoord,TiltLeftUV_TiltLeftUV_Value_1); +float4 _MainTex_1 = tex2D(_MainTex,TiltLeftUV_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Tilt_Left.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Left.shader.meta new file mode 100644 index 00000000..8536d398 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Left.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 59e49c233721da848be9585c131dcb65 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Tilt_Right.shader b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Right.shader new file mode 100644 index 00000000..70323d80 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Right.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Tilt_Right" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +TiltRightUV_TiltRightUV_Value_1("TiltRightUV_TiltRightUV_Value_1", Range(-2, 2)) = 0 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float TiltRightUV_TiltRightUV_Value_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 TiltRightUV(float2 uv, float offsetY) +{ +uv += float2(0, offsetY*(1-uv.x)); +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 TiltRightUV_1 = TiltRightUV(i.texcoord,TiltRightUV_TiltRightUV_Value_1); +float4 _MainTex_1 = tex2D(_MainTex,TiltRightUV_1); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Tilt_Right.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Right.shader.meta new file mode 100644 index 00000000..a13b2b08 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Tilt_Right.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 55dd624ab1433d14bb5580c0e8fb35b0 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnFire.shader b/Assets/2DxFX/ExtraShaders/Shader/TurnFire.shader new file mode 100644 index 00000000..7bac613d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnFire.shader @@ -0,0 +1,149 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/TurnFire" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Fire_Displacement_Value("_Fire_Displacement_Value", Range(-0.3, 0.3)) = -0.026 +_Fire_Addition_Value("_Fire_Addition_Value", Range(0, 4)) = 0.464 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _Fire_Displacement_Value; +float _Fire_Addition_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float Generate_Fire_hash2D(float2 x) +{ +return frac(sin(dot(x, float2(13.454, 7.405)))*12.3043); +} + +float Generate_Fire_voronoi2D(float2 uv, float precision) +{ +float2 fl = floor(uv); +float2 fr = frac(uv); +float res = 1.0; +for (int j = -1; j <= 1; j++) +{ +for (int i = -1; i <= 1; i++) +{ +float2 p = float2(i, j); +float h = Generate_Fire_hash2D(fl + p); +float2 vp = p - fr + h; +float d = dot(vp, vp); +res += 1.0 / pow(d, 8.0); +} +} +return pow(1.0 / res, precision); +} + +float4 Generate_Fire(float2 uv, float posX, float posY, float precision, float smooth, float speed, float black) +{ +uv += float2(posX, posY); +float t = _Time*60*speed; +float up0 = Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(0, -t), precision); +float up1 = 0.5 + Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(42, -t ) + 30.0, precision); +float finalMask = up0 * up1 + (1.0 - uv.y); +finalMask += (1.0 - uv.y)* 0.5; +finalMask *= 0.7 - abs(uv.x - 0.5); +float4 result = smoothstep(smooth, 0.95, finalMask); +result.a = saturate(result.a + black); +return result; +} +float4 Color_PreGradients(float4 rgba, float4 a, float4 b, float4 c, float4 d, float offset, float fade, float speed) +{ +float gray = (rgba.r + rgba.g + rgba.b) / 3; +gray += offset+(speed*_Time*20); +float4 result = a + b * cos(6.28318 * (c * gray + d)); +result.a = rgba.a; +result.rgb = lerp(rgba.rgb, result.rgb, fade); +return result; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float4 _Generate_Fire_1 = Generate_Fire(i.texcoord,0,0,0.041,0.634,1,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,0,_Generate_Fire_1.g*_Generate_Fire_1.a,_Fire_Displacement_Value); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 _PremadeGradients_1 = Color_PreGradients(_Generate_Fire_1,float4(1,0,0.13,1),float4(0.42,0.95,0,1),float4(0.99,0.68,0.99,1),float4(0.39,0.39,1,1),-0.41,1,0); +_MainTex_1 = lerp(_MainTex_1,_MainTex_1*_MainTex_1.a + _PremadeGradients_1*_PremadeGradients_1.a,_Fire_Addition_Value * _MainTex_1.a); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnFire.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/TurnFire.shader.meta new file mode 100644 index 00000000..117be0f7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnFire.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c46ee521892674a4d848a6d297cc9bb6 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnFirePixel.shader b/Assets/2DxFX/ExtraShaders/Shader/TurnFirePixel.shader new file mode 100644 index 00000000..f946dbca --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnFirePixel.shader @@ -0,0 +1,157 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/TurnFirePixel" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Fire_Pixel_Size("Fire_Pixel_Size", Range(1, 128)) = 48 +Fire_Displacement_Value("Fire_Displacement_Value", Range(-0.3, 0.3)) = -0.026 +Fire_Addition("Fire_Addition", Range(0, 4)) = 0.464 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Fire_Pixel_Size; +float Fire_Displacement_Value; +float Fire_Addition; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float Generate_Fire_hash2D(float2 x) +{ +return frac(sin(dot(x, float2(13.454, 7.405)))*12.3043); +} + +float Generate_Fire_voronoi2D(float2 uv, float precision) +{ +float2 fl = floor(uv); +float2 fr = frac(uv); +float res = 1.0; +for (int j = -1; j <= 1; j++) +{ +for (int i = -1; i <= 1; i++) +{ +float2 p = float2(i, j); +float h = Generate_Fire_hash2D(fl + p); +float2 vp = p - fr + h; +float d = dot(vp, vp); +res += 1.0 / pow(d, 8.0); +} +} +return pow(1.0 / res, precision); +} + +float4 Generate_Fire(float2 uv, float posX, float posY, float precision, float smooth, float speed, float black) +{ +uv += float2(posX, posY); +float t = _Time*60*speed; +float up0 = Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(0, -t), precision); +float up1 = 0.5 + Generate_Fire_voronoi2D(uv * float2(6.0, 4.0) + float2(42, -t ) + 30.0, precision); +float finalMask = up0 * up1 + (1.0 - uv.y); +finalMask += (1.0 - uv.y)* 0.5; +finalMask *= 0.7 - abs(uv.x - 0.5); +float4 result = smoothstep(smooth, 0.95, finalMask); +result.a = saturate(result.a + black); +return result; +} +float4 Color_PreGradients(float4 rgba, float4 a, float4 b, float4 c, float4 d, float offset, float fade, float speed) +{ +float gray = (rgba.r + rgba.g + rgba.b) / 3; +gray += offset+(speed*_Time*20); +float4 result = a + b * cos(6.28318 * (c * gray + d)); +result.a = rgba.a; +result.rgb = lerp(rgba.rgb, result.rgb, fade); +return result; +} +float2 PixelUV(float2 uv, float x) +{ +uv = floor(uv * x + 0.5) / x; +return uv; +} +float2 SimpleDisplacementUV(float2 uv,float x, float y, float value) +{ +return lerp(uv,uv+float2(x,y),value); +} +float4 frag (v2f i) : COLOR +{ +float2 PixelUV_1 = PixelUV(i.texcoord,Fire_Pixel_Size); +float4 _Generate_Fire_1 = Generate_Fire(PixelUV_1,0,0,0.041,0.634,1,0); +float2 _Simple_Displacement_1 = SimpleDisplacementUV(i.texcoord,0,_Generate_Fire_1.g*_Generate_Fire_1.a,Fire_Displacement_Value); +float4 _MainTex_1 = tex2D(_MainTex,_Simple_Displacement_1); +float4 _PremadeGradients_1 = Color_PreGradients(_Generate_Fire_1,float4(1,0,0.13,1),float4(0.42,0.95,0,1),float4(0.99,0.68,0.99,1),float4(0.39,0.39,1,1),-0.41,1,0); +_MainTex_1 = lerp(_MainTex_1,_MainTex_1*_MainTex_1.a + _PremadeGradients_1*_PremadeGradients_1.a,Fire_Addition * _MainTex_1.a); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnFirePixel.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/TurnFirePixel.shader.meta new file mode 100644 index 00000000..39c25e5c --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnFirePixel.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1bfa6071b9fcc2d43ad8934b94d84b9e +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnGold.shader b/Assets/2DxFX/ExtraShaders/Shader/TurnGold.shader new file mode 100644 index 00000000..972fcdb9 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnGold.shader @@ -0,0 +1,117 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/TurnGold" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnGold_Speed_1("_TurnGold_Speed_1", Range(-8, 8)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnGold_Speed_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ColorTurnGold(float2 uv, sampler2D txt, float speed) +{ +float4 txt1=tex2D(txt,uv); +float lum = dot(txt1.rgb, float3 (0.2126, 0.2152, 0.4722)); +float3 metal = float3(lum,lum,lum); +metal.r = lum * pow(1.46*lum, 4.0); +metal.g = lum * pow(1.46*lum, 4.0); +metal.b = lum * pow(0.86*lum, 4.0); +float2 tuv = uv; +uv *= 2.5; +float time = (_Time/4)*speed; +float a = time * 50; +float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); +n = fmod(((5.0 + n) / 5.0), 1.0); +n += tex2D(txt, tuv).r * 0.21 + tex2D(txt, tuv).g * 0.4 + tex2D(txt, tuv).b * 0.2; +n=fmod(n,1.0); +float tx = n * 6.0; +float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); +float4 sortie=float4(1.0, 1.0, 1.0,r); +sortie.rgb=metal.rgb+(1-sortie.a); +sortie.rgb=sortie.rgb/2+dot(sortie.rgb, float3 (0.1126, 0.4552, 0.1722)); +sortie.rgb-=float3(0.0,0.1,0.45); +sortie.rg+=0.025; +sortie.a=txt1.a; +return sortie; +} +float4 frag (v2f i) : COLOR +{ +float4 _TurnGold_1 = ColorTurnGold(i.texcoord,_MainTex,_TurnGold_Speed_1); +float4 FinalResult = _TurnGold_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnGold.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/TurnGold.shader.meta new file mode 100644 index 00000000..a505f12a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnGold.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96fe7f2e8da185a46aa13ea51d527610 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnLiquid.shader b/Assets/2DxFX/ExtraShaders/Shader/TurnLiquid.shader new file mode 100644 index 00000000..c0b761c2 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnLiquid.shader @@ -0,0 +1,120 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/TurnLiquid" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +WaveX("WaveX", Range(0, 2)) = 2 +WaveY("WaveY", Range(0, 2)) = 2 +DistanceX("DistanceX", Range(0, 1)) = 0.3 +DistanceY("DistanceY", Range(0, 1)) = 0.3 +Speed("Speed", Range(-2, 2)) = 1 +TurnLiquid_Value("TurnLiquid_Value", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float WaveX; +float WaveY; +float DistanceX; +float DistanceY; +float Speed; +float TurnLiquid_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 LiquidUV(float2 p, float WaveX, float WaveY, float DistanceX, float DistanceY, float Speed) +{ Speed *= _Time * 100; +float x = sin(p.y * 4 * WaveX + Speed); +float y = cos(p.x * 4 * WaveY + Speed); +x += sin(p.x)*0.1; +y += cos(p.y)*0.1; +x *= y; +y *= x; +x *= y + WaveY*8; +y *= x + WaveX*8; +p.x = p.x + x * DistanceX * 0.015; +p.y = p.y + y * DistanceY * 0.015; + +return p; +} +float4 frag (v2f i) : COLOR +{ +float2 LiquidUV_1 = LiquidUV(i.texcoord,WaveX,WaveY,DistanceX,DistanceY,Speed); +i.texcoord = lerp(i.texcoord,LiquidUV_1,TurnLiquid_Value); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnLiquid.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/TurnLiquid.shader.meta new file mode 100644 index 00000000..24827722 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnLiquid.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f10d538baa768044d8d1405430746161 +timeCreated: 1542019638 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnMetal.shader b/Assets/2DxFX/ExtraShaders/Shader/TurnMetal.shader new file mode 100644 index 00000000..1509b75e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnMetal.shader @@ -0,0 +1,114 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/TurnMetal" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnMetal_Speed_1("_TurnMetal_Speed_1", Range(-8, 8)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnMetal_Speed_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ColorTurnMetal(float2 uv, sampler2D txt, float speed) +{ +float4 txt1=tex2D(txt,uv); +float lum = dot(txt1.rgb, float3 (0.4126, 0.8152, 0.1722)); +float3 metal = float3(lum,lum,lum); +metal.r = lum * pow(0.66*lum, 4.0); +metal.g = lum * pow(0.66*lum, 4.0); +float2 tuv = uv; +uv *= 2.5; +float time = (_Time/4)*speed; +float a = time * 50; +float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); +n = fmod(((5.0 + n) / 5.0), 1.0); +n += tex2D(txt, tuv).r * 0.21 + tex2D(txt, tuv).g * 0.4 + tex2D(txt, tuv).b * 0.2; +n=fmod(n,1.0); +float tx = n * 6.0; +float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); +float4 sortie=float4(1.0, 1.0, 1.0,r); +sortie.rgb=metal.rgb+(1-sortie.a); +sortie.rgb=0.05+sortie.rgb*0.5+dot(sortie.rgb, float3 (0.2126, 0.2152, 0.1722))*0.5; +sortie.a=txt1.a; +return sortie; +} +float4 frag (v2f i) : COLOR +{ +float4 _TurnMetal_1 = ColorTurnMetal(i.texcoord,_MainTex,_TurnMetal_Speed_1); +float4 FinalResult = _TurnMetal_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnMetal.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/TurnMetal.shader.meta new file mode 100644 index 00000000..7c7eee6a --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnMetal.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c67ece7a22944434c9f20ddc93e3f544 +timeCreated: 1542019637 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnToInfinite.shader b/Assets/2DxFX/ExtraShaders/Shader/TurnToInfinite.shader new file mode 100644 index 00000000..25f029f7 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnToInfinite.shader @@ -0,0 +1,122 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/TurnToInfinite" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +Zoom("Zoom", Range(-1, 4)) = 1 +PosX("PosX", Range(-1, 2)) = 0 +PosY("PosY", Range(-1, 2)) = 0 +Intensity("Intensity", Range(0, 4)) = 1 +Speed("Speed", Range(-10, 10)) = 1 +TurnToInfinite_Value("TurnToInfinite_Value", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float Zoom; +float PosX; +float PosY; +float Intensity; +float Speed; +float TurnToInfinite_Value; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 AnimatedInfiniteZoomUV(float2 uv, float zoom2, float posx, float posy, float radius, float speed) +{ +uv+=float2(posx,posy); +float2 muv = uv; +float atans = (atan2(uv.x - 0.5, uv.y - 0.5) + 3.1415) / (3.1415 * 2.); +float time = _Time * speed*10; +uv -= 0.5; + uv *= (1. / pow(4., frac(time / 2.))); +uv += 0.5; +float2 tri = abs(1. - (uv * 2.)); + float zoom = min(pow(2., floor(-log2(tri.x))), pow(2., floor(-log2(tri.y)))); + float zoom_id = log2(zoom) + 1.; + float div = ((pow(2., ((-zoom_id) - 1.)) * ((-2.) + pow(2., zoom_id)))); + float2 uv2 = (((uv) - (div)) * zoom); + uv2 = lerp(muv * radius, uv2 * radius, zoom2); + return uv2; +} +float4 frag (v2f i) : COLOR +{ +float2 AnimatedInfiniteZoomUV_1 = AnimatedInfiniteZoomUV(i.texcoord,Zoom,PosX,PosY,Intensity,Speed); +i.texcoord = lerp(i.texcoord,AnimatedInfiniteZoomUV_1,TurnToInfinite_Value); +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +FinalResult.rgb *= FinalResult.a; +FinalResult.a = saturate(FinalResult.a); +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnToInfinite.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/TurnToInfinite.shader.meta new file mode 100644 index 00000000..1086751d --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnToInfinite.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a812ac7caf32dcc4dab9e2c9cc834940 +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnTransparent.shader b/Assets/2DxFX/ExtraShaders/Shader/TurnTransparent.shader new file mode 100644 index 00000000..3fd039db --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnTransparent.shader @@ -0,0 +1,117 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/TurnTransparent" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_TurnTransparent_Speed_1("_TurnTransparent_Speed_1", Range(-8, 8)) = 1 +_FillColor_Color_1("_FillColor_Color_1", COLOR) = (0.3814879,1,0.1911765,1) +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _TurnTransparent_Speed_1; +float4 _FillColor_Color_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 UniColor(float4 txt, float4 color) +{ +txt.rgb = lerp(txt.rgb,color.rgb,color.a); +return txt; +} +float4 ColorTurnTransparent(float2 uv, sampler2D txt, float speed) +{ +float4 txt1=tex2D(txt,uv); +float2 tuv = uv; +uv *= 2.5; +float time = (_Time/4)*speed; +float a = time * 50; +float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); +n = fmod(((5.0 + n) / 5.0), 1.0); +n += tex2D(txt, tuv).r * 0.61 + tex2D(txt, tuv).g * 0.4 + tex2D(txt, tuv).b * 0.2; +n=fmod(n,1.0); +float tx = n * 6.0; +float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); +float4 sortie=float4(1.0, 1.0, 1.0,r); +sortie.rgb=1-sortie.a; +sortie.a*=txt1.a*r; +return sortie; +} +float4 frag (v2f i) : COLOR +{ +float4 _TurnTransparent_1 = ColorTurnTransparent(i.texcoord,_MainTex,_TurnTransparent_Speed_1); +float4 FillColor_1 = UniColor(_TurnTransparent_1,_FillColor_Color_1); +float4 FinalResult = FillColor_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/TurnTransparent.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/TurnTransparent.shader.meta new file mode 100644 index 00000000..d8490d8f --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/TurnTransparent.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 59014558153d8874aaf4011117fd9630 +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Twist.shader b/Assets/2DxFX/ExtraShaders/Shader/Twist.shader new file mode 100644 index 00000000..240e6b26 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Twist.shader @@ -0,0 +1,117 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Twist" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +TwistUV_TwistUV_Bend_1("TwistUV_TwistUV_Bend_1", Range(-1, 1)) = 0.296 +TwistUV_TwistUV_PosX_1("TwistUV_TwistUV_PosX_1", Range(-1, 2)) = 0.5 +TwistUV_TwistUV_PosY_1("TwistUV_TwistUV_PosY_1", Range(-1, 2)) = 0.5 +TwistUV_TwistUV_Radius_1("TwistUV_TwistUV_Radius_1", Range(0, 1)) = 0.5 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float TwistUV_TwistUV_Bend_1; +float TwistUV_TwistUV_PosX_1; +float TwistUV_TwistUV_PosY_1; +float TwistUV_TwistUV_Radius_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 TwistUV(float2 uv, float value, float posx, float posy, float radius) +{ +float2 center = float2(posx, posy); +float2 tc = uv - center; +float dist = length(tc); +if (dist < radius) +{ +float percent = (radius - dist) / radius; +float theta = percent * percent * 16.0 * sin(value); +float s = sin(theta); +float c = cos(theta); +tc = float2(dot(tc, float2(c, -s)), dot(tc, float2(s, c))); +} +tc += center; +return tc; +} +float4 frag (v2f i) : COLOR +{ +float2 TwistUV_1 = TwistUV(i.texcoord,TwistUV_TwistUV_Bend_1,TwistUV_TwistUV_PosX_1,TwistUV_TwistUV_PosY_1,TwistUV_TwistUV_Radius_1); +i.texcoord = lerp(i.texcoord,TwistUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Twist.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Twist.shader.meta new file mode 100644 index 00000000..d8815713 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Twist.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9cc1d16419310b343a39291f202c5dbf +timeCreated: 1542019636 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Vintage.shader b/Assets/2DxFX/ExtraShaders/Shader/Vintage.shader new file mode 100644 index 00000000..e9bcd24e --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Vintage.shader @@ -0,0 +1,101 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Vintage" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_ColorFilters_Fade_1("_ColorFilters_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float _ColorFilters_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 ColorFilters(float4 rgba, float4 red, float4 green, float4 blue, float fade) +{ +float3 c_r = float3(red.r, red.g, red.b); +float3 c_g = float3(green.r, green.g, green.b); +float3 c_b = float3(blue.r, blue.g, blue.b); +float4 r = float4(dot(rgba.rgb, c_r) + red.a, dot(rgba.rgb, c_g) + green.a, dot(rgba.rgb, c_b) + blue.a, rgba.a); +return lerp(rgba, saturate(r), fade); + +} +float4 frag (v2f i) : COLOR +{ +float4 _MainTex_1 = tex2D(_MainTex, i.texcoord); +float4 _ColorFilters_1 = ColorFilters(_MainTex_1,float4(2,1.09,-1.04,-0.48),float4(0.42,1.26,-0.01,-0.2),float4(-0.4,1.21,-0.31,0.12),_ColorFilters_Fade_1); +float4 FinalResult = _ColorFilters_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Vintage.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Vintage.shader.meta new file mode 100644 index 00000000..107692ef --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Vintage.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2ae634f0958330a4d8d700a8e731044a +timeCreated: 1542019634 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/ExtraShaders/Shader/Zoom.shader b/Assets/2DxFX/ExtraShaders/Shader/Zoom.shader new file mode 100644 index 00000000..898eaa37 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Zoom.shader @@ -0,0 +1,108 @@ +////////////////////////////////////////////// +/// 2DxFX v3 - by VETASOFT 2018 // +////////////////////////////////////////////// + + +////////////////////////////////////////////// + +Shader "2DxFX_Extra_Shaders/Zoom" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +ZoomUV_Zoom_1("ZoomUV_Zoom_1", Range(0.2, 4)) = 1.908 +ZoomUV_PosX_1("ZoomUV_PosX_1", Range(-3, 3)) = 0.5 +ZoomUV_PosY_1("ZoomUV_PosY_1", Range(-3, 3)) =0.5 +_LerpUV_Fade_1("_LerpUV_Fade_1", Range(0, 1)) = 1 +_SpriteFade("SpriteFade", Range(0, 1)) = 1.0 + +// required for UI.Mask +[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8 +[HideInInspector]_Stencil("Stencil ID", Float) = 0 +[HideInInspector]_StencilOp("Stencil Operation", Float) = 0 +[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255 +[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255 +[HideInInspector]_ColorMask("Color Mask", Float) = 15 + +} + +SubShader +{ + +Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _SpriteFade; +float ZoomUV_Zoom_1; +float ZoomUV_PosX_1; +float ZoomUV_PosY_1; +float _LerpUV_Fade_1; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float2 ZoomUV(float2 uv, float zoom, float posx, float posy) +{ +float2 center = float2(posx, posy); +uv -= center; +uv = uv * zoom; +uv += center; +return uv; +} +float4 frag (v2f i) : COLOR +{ +float2 ZoomUV_1 = ZoomUV(i.texcoord,ZoomUV_Zoom_1,ZoomUV_PosX_1,ZoomUV_PosY_1); +ZoomUV_1 = saturate(ZoomUV_1); +i.texcoord = lerp(i.texcoord,ZoomUV_1,_LerpUV_Fade_1); +float4 _MainTex_1 = tex2D(_MainTex,i.texcoord); +float4 FinalResult = _MainTex_1; +FinalResult.rgb *= i.color.rgb; +FinalResult.a = FinalResult.a * _SpriteFade * i.color.a; +return FinalResult; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} diff --git a/Assets/2DxFX/ExtraShaders/Shader/Zoom.shader.meta b/Assets/2DxFX/ExtraShaders/Shader/Zoom.shader.meta new file mode 100644 index 00000000..70df1063 --- /dev/null +++ b/Assets/2DxFX/ExtraShaders/Shader/Zoom.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6a810a97337789d42b8555b0183cd16f +timeCreated: 1542019635 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources.meta b/Assets/2DxFX/Resources.meta new file mode 100644 index 00000000..fd1c59c2 --- /dev/null +++ b/Assets/2DxFX/Resources.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f46ca1fc032902549aabeaa555ac8364 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL.meta b/Assets/2DxFX/Resources/2dxfx_AL.meta new file mode 100644 index 00000000..9db7c092 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e4fe459c1a74b8d40989813dd0fe322f +folderAsset: yes +timeCreated: 1468931777 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_4Gradients.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_4Gradients.shader new file mode 100644 index 00000000..348397ae --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_4Gradients.shader @@ -0,0 +1,91 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/4Gradients" +{ + + Properties + { + [HideInInspector] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Color1("_Color1", Color) = (1,1,1,1) + _Color2("_Color2", Color) = (1,1,1,1) + _Color3("_Color3", Color) = (1,1,1,1) + _Color4("_Color4", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + + } + + Cull Off + Lighting Off + ZWrite [_Z] + + BlendOp [_BlendOp] + Blend [_SrcBlend] [_DstBlend] + + CGPROGRAM + + #pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + + sampler2D _MainTex; + float4 _Color; + float4 _Color1; + float4 _Color2; + float4 _Color3; + float4 _Color4; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float4 c = tex2D(_MainTex,p) * IN.color; + + float alpha = c.a; + + float4 colorA = lerp(_Color3,_Color4,p.x*1.3); + float4 colorB = lerp(_Color1,_Color2,p.x*1.3); + float4 colorC = lerp(colorA,colorB,p.y*1.3); + c = lerp(c,colorC, colorC.a); + c.a *= alpha; + c.a *= (1 - _Alpha); + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites-Defaultt" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_4Gradients.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_4Gradients.shader.meta new file mode 100644 index 00000000..b89daccb --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_4Gradients.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 03ab484aa94bfdf46aa0e08cfcdd564f +timeCreated: 1529660409 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BlackHole.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BlackHole.shader new file mode 100644 index 00000000..2ee4b261 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BlackHole.shader @@ -0,0 +1,117 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/BlackHole" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Size("Size", Range(0,1)) = 0 + _Distortion("Distortion", Range(0,1)) = 0 + _Hole("Hole", Range(0,1)) = 0 + _Speed("Speed", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Color("ColorX", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float4 _Color; + float4 _ColorX; + float _Size; + float _Distortion; + float _Hole; + float _Speed; + float _Alpha; + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + float4 hole(sampler2D tex, float2 uv, float time) + { + float radius = 0.5; + float2 center = float2(0.5,0.5); + float2 tc = uv - center; + float dist = length(tc); + if (dist < radius) + { + float percent = (radius - dist) / radius; + float theta = percent * percent * (2.0 * sin(time)) * 8.0; + float s = sin(theta); + float c = cos(theta); + tc = float2(dot(tc, float2(c, -s)), dot(tc, float2(s, c))); + } + tc += center; + float4 color = tex2D(tex, tc); + return color; + } + + + void surf(Input IN, inout SurfaceOutput o) + { + _Speed *= 5.0f; + + + float2 uv = (IN.uv_MainTex - float2(0.5,0.5))*1.246; + float sinX = sin(_Speed * _Time); + float cosX = cos(_Speed * _Time); + float sinY = sinX; + float2x2 rotationMatrix = float2x2(cosX, -sinX, sinY, cosX); + uv.xy = mul(uv, rotationMatrix) + float2(0.5,0.5); + float dist = 1.0 - smoothstep(_Hole,_Hole + 0.15, length(float2(0.5,0.5) - uv)); + float dista = 1.0 - smoothstep(0.25,0.5, length(float2(0.5,0.5) - uv)); + float4 finalColor = hole(_MainTex, uv, _Distortion); + finalColor.rgb *= 1 - dist; + finalColor.a = finalColor.a*(1 - _Alpha); + finalColor.a *= dista*(1 - dist); + + + + + + + + + o.Albedo = finalColor.rgb * finalColor.a; + o.Alpha = finalColor.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BlackHole.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BlackHole.shader.meta new file mode 100644 index 00000000..2ac85689 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BlackHole.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b7f9fa38f89278647bc79d8196805adb +timeCreated: 1529660457 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blood.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blood.shader new file mode 100644 index 00000000..9c5b25b5 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blood.shader @@ -0,0 +1,99 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Blood" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [PerRendererData] _MainTex2("Sprite Texture2", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + EValue("EValue", Range(0,1)) = 1.0 + Light("Light", Range(0,1)) = 1.0 + TurnToLiquid("TurnToLiquid", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _Distortion; + float _Speed; + float EValue; + float Light; + float TurnToLiquid; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + float2 p = IN.uv_MainTex; + float c1 = 1; + float noffset = TurnToLiquid*sin(p.x * 16 * (TurnToLiquid + 1)) / 2; + float _ClipUp = 1 - TurnToLiquid * 2; + float Mix = TurnToLiquid + _Distortion; + c1 = saturate(((1 + noffset) / (1 - _ClipUp + 0.04))*(1 - IN.uv_MainTex.y) - noffset); + float r = 1 - c1; + float2 p2 = IN.uv_MainTex; + p2.y += TurnToLiquid - 0.2; + p2 /= 2 / (1 + Mix / 8); + float4 col2 = tex2D(_MainTex2,p2); + col2 *= Mix * 20; + p += float2(col2.r / 32,col2.g / 32); + p.x -= Mix / 4; + p.x += noffset / 4; + p.y -= _Distortion / 2.3; + float4 col = tex2D(_MainTex,p)* IN.color; + col.rgb += r / 2; + col.r += col2.r / 8; + col.gb -= col2.gb / 8; + float alpha = 1 - ((0.4 + p.y)*TurnToLiquid * 2); + float4 c = float4(col.rgb,col.a*alpha*(1 - _Alpha)); + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blood.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blood.shader.meta new file mode 100644 index 00000000..9cbf1cac --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blood.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1757b3fac11bbaf4e84b37c12c5ecedb +timeCreated: 1529660416 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blur.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blur.shader new file mode 100644 index 00000000..9922d8a9 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blur.shader @@ -0,0 +1,91 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Blur" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float4 _Color; + float _Distortion; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float stepU = 0.00390625f * _Distortion; + float stepV = stepU; + + float3x3 gaussian = float3x3(1.0,2.0,1.0,2.0,4.0,2.0,1.0,2.0,1.0); + float4 result = float4(0,0,0,0); + float4 Alpha = tex2D(_MainTex, IN.uv_MainTex); + float2 texCoord = float2(0,0); + + texCoord = IN.uv_MainTex.xy + float2(-stepU, -stepV); result += tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy + float2(-stepU, 0); result += 2.0 * tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy + float2(-stepU, stepV); result += tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy + float2(0, -stepV); result += 2.0 * tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy; result += 4.0 * tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy + float2(0, stepV); result += 2.0 * tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy + float2(stepU, -stepV); result += tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy + float2(stepU, 0); result += 2.0* tex2D(_MainTex,texCoord); + texCoord = IN.uv_MainTex.xy + float2(stepU, -stepV); result += tex2D(_MainTex,texCoord); + + float4 r = float4(0,0,0,0); + r = result*0.0625; + r.a *= Alpha.a*(1.0 - _Alpha); + r = r*IN.color; + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blur.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blur.shader.meta new file mode 100644 index 00000000..bb9cef2b --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Blur.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5c745a6df4568474f9dde010ce29c9f5 +timeCreated: 1529660431 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BurningFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BurningFX.shader new file mode 100644 index 00000000..2820f1da --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BurningFX.shader @@ -0,0 +1,93 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/BurningFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float4 _Color; + float _Distortion; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + inline float3 Burn(float _t) + { + float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); + float v = (0.317398726 + 4.22806245e-5*_t + 4.20481691e-8*_t*_t) / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); + float kuv = 2.0 * u - 8.0 * v + 4.0; + float x = 3.0 * u / kuv; + float y = 2.0 * v / kuv; + float z = 1.0 - x - y; + float Y = 1.0; + float YY = Y / y; + float X = YY * x; + float Z = YY * z; + float3 RGB = float3(X,Y,Z); + RGB.x = RGB.x * pow(0.0006*_t*_Distortion, 4.0) / _Distortion; + RGB.y = RGB.y * pow(0.0004*_t*_Distortion, 4.0) / _Distortion; + RGB.z = RGB.z * pow(0.0004*_t*_Distortion, 4.0)*_Distortion; + + return RGB; + } + + void surf(Input IN, inout SurfaceOutput o) + { + float2 uv = IN.uv_MainTex; + float4 noise = tex2D(_MainTex, uv)* IN.color; + float lum = dot(noise.rgb, float3 (0.2126, 0.7152, 0.0722)); + float3 c = Burn(lum * 4000.0); + c = c + noise.rgb; + float4 r = float4(c,noise.a * 1 - _Alpha); + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + clip(o.Alpha - 0.05); + } + + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BurningFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BurningFX.shader.meta new file mode 100644 index 00000000..7fbfd583 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_BurningFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 099284d74671d7e4782d3ae3dc051946 +timeCreated: 1529660411 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Cartoon.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Cartoon.shader new file mode 100644 index 00000000..2144c7f8 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Cartoon.shader @@ -0,0 +1,115 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Cartoon" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _ColorLevel("ColorLevel", Range(0,1)) = 0 + _EdgeSize("EdgeSize", Range(0,1)) = 0 + _ColorB("ColorB", Range(0,1)) = 0 + _Size("Size", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float4 _Color; + float _ColorLevel; + float _EdgeSize; + float _ColorB; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + inline float4 edgeFilter(in int px, in int py,float2 uv) + { + + float4 color = 0.0; + float2 kUV = uv*256.0f; + color += tex2D(_MainTex, (kUV + float2(px + 1, py + 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px , py + 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px - 1, py + 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px + 1, py)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px , py)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px - 1, py)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px + 1, py - 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px , py - 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(px - 1, py - 1)) * 0.00390625f); + return color / 9.0; + + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 tex = tex2D(_MainTex, uv); + + float4 color = 0; + float2 kUV = uv*256.0f; + color += tex2D(_MainTex, (kUV + float2(1 , 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(0 , 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(-1 , 1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(1 , 0)) * 0.00390625f); + color += tex2D(_MainTex, (kUV)* 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(-1 , 0)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(1 , -1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(0 , -1)) * 0.00390625f); + color += tex2D(_MainTex, (kUV + float2(-1 , -1)) * 0.00390625f); + color /= 9.0; + color *= IN.color; + color[0] = floor(7.0 * color[0]) / _ColorLevel; + color[1] = floor(7.0 * color[1]) / _ColorLevel; + color[2] = floor(7.0 * color[2]) / _ColorLevel; + float4 sum = abs(edgeFilter(0, 1, uv) - edgeFilter(0, -1, uv)); + sum += abs(edgeFilter(1, 0, uv) - edgeFilter(-1, 0, uv)); + sum /= 2.0; + float edgsum = _EdgeSize + 0.05; + if (length(sum) > edgsum) { color.rgb = 0.0; } + float4 r = float4(color.rgb,tex.a * 1 - _Alpha); + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Cartoon.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Cartoon.shader.meta new file mode 100644 index 00000000..b421c6d2 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Cartoon.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c6f5e287a8ce69a48a978084086d3354 +timeCreated: 1529660460 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CircleFade.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CircleFade.shader new file mode 100644 index 00000000..63b8172d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CircleFade.shader @@ -0,0 +1,80 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/CircleFade" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _Offset("Offset", Range(-1,1)) = 0.5 + _InOut("InOut", Range(0,1)) = 0.5 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float4 _Color; + float _Offset; + float _InOut; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 tex = tex2D(_MainTex, uv)* IN.color; + float alpha = tex.a; + float2 center = float2(0.5,0.5); + float dist = 1.0 - smoothstep(_Offset,_Offset + 0.15, length(center - uv)); + float c = 0; + if (_InOut == 0) { c = dist; } + else { c = 1 - dist; } + tex.a = alpha*c - _Alpha; + + o.Albedo = tex.rgb * tex.a; + o.Alpha = tex.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CircleFade.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CircleFade.shader.meta new file mode 100644 index 00000000..caa593f1 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CircleFade.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4e3d00412b491ed46b5623ad5afdce3a +timeCreated: 1529660427 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Clipping.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Clipping.shader new file mode 100644 index 00000000..11a5c3ea --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Clipping.shader @@ -0,0 +1,82 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Clipping" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _ClipLeft("Clipping Left", Range(0,1)) = 1 + _ClipRight("Clipping Right", Range(0,1)) = 1 + _ClipUp("Clipping Up", Range(0,1)) = 1 + _ClipDown("Clipping Down", Range(0,1)) = 1 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float4 _Color; + float _Size; + float _ClipLeft; + float _ClipRight; + float _ClipUp; + float _ClipDown; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 mainColor = tex2D(_MainTex,IN.uv_MainTex)*IN.color; + if (IN.uv_MainTex.y > _ClipUp) mainColor = float4(0,0,0,0); + if (IN.uv_MainTex.y < 1 - _ClipDown) mainColor = float4(0,0,0,0); + if (IN.uv_MainTex.x > _ClipRight) mainColor = float4(0,0,0,0); + if (IN.uv_MainTex.x < 1 - _ClipLeft) mainColor = float4(0,0,0,0); + mainColor.a = mainColor.a - _Alpha; + + o.Albedo = mainColor.rgb * mainColor.a; + o.Alpha = mainColor.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Clipping.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Clipping.shader.meta new file mode 100644 index 00000000..a39d102e --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Clipping.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 79a0e03ddd08b654b8ef742d47d1afd3 +timeCreated: 1529660437 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Color.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Color.shader new file mode 100644 index 00000000..30a47237 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Color.shader @@ -0,0 +1,72 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Color" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _ColorX("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float _Size; + float4 _Color; + float4 _ColorX; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float4 c = tex2D(_MainTex,p) * IN.color; + c.rgb = _ColorX.rgb; + c.a = c.a - _Alpha; + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Color.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Color.shader.meta new file mode 100644 index 00000000..451f5833 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Color.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 01f3ccfcc80885f4588ed969c463c8ca +timeCreated: 1529660408 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorChange.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorChange.shader new file mode 100644 index 00000000..d13c07e8 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorChange.shader @@ -0,0 +1,116 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/ColorChange" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _ColorX("Tint", Color) = (1,1,1,1) + _HueShift("Hue", Range(0,1)) = 1.0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Tolerance("Tolerance", Range(0,1)) = 1.0 + _Sat("Saturation", Float) = 1 + _Val("Value", Float) = 1 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + +#pragma target 3.0 + sampler2D _MainTex; + float _Size; + float _HueShift; + float _Tolerance; + float4 _Color; + float4 _ColorX; + float _Alpha; + float _Sat; + float _Val; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + float3 shift_col(float3 RGB, float3 shift) + { + + float3 RESULT = float3(RGB); + float a1 = shift.z*shift.y; + float a2 = shift.x*3.14159265 / 180; + float VSU = a1*cos(a2); + float VSW = a1*sin(a2); + + RESULT.x = (.299*shift.z + .701*VSU + .168*VSW)*RGB.x + + (.587*shift.z - .587*VSU + .330*VSW)*RGB.y + + (.114*shift.z - .114*VSU - .497*VSW)*RGB.z; + + RESULT.y = (.299*shift.z - .299*VSU - .328*VSW)*RGB.x + + (.587*shift.z + .413*VSU + .035*VSW)*RGB.y + + (.114*shift.z - .114*VSU + .292*VSW)*RGB.z; + + RESULT.z = (.299*shift.z - .3*VSU + 1.25*VSW)*RGB.x + + (.587*shift.z - .588*VSU - 1.05*VSW)*RGB.y + + (.114*shift.z + .886*VSU - .203*VSW)*RGB.z; + + return (RESULT); + } + void surf(Input IN, inout SurfaceOutput o) + { + + + float4 c = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + float3 shift = float3(_HueShift, _Sat, _Val); + float3 shifted = shift_col(c, shift); + + float3 c1 = c.rgb; + c1 = c1 - _ColorX.rgb; + c1 = abs(c1); + if (c1.r<_Tolerance) c.rgb = shifted; + if (c1.g<_Tolerance) c.rgb = shifted; + if (c1.b<_Tolerance) c.rgb = shifted; + + c.a = c.a - _Alpha; + + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorChange.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorChange.shader.meta new file mode 100644 index 00000000..19f8c1c6 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorChange.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 82730184b4c378b4e8bfbfad52929707 +timeCreated: 1529660440 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorRGB.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorRGB.shader new file mode 100644 index 00000000..c418d870 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorRGB.shader @@ -0,0 +1,81 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/ColorRGB" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _ColorR("ColorR", Range(0,1)) = 0 + _ColorG("ColorG", Range(0,1)) = 0 + _ColorB("ColorB", Range(0,1)) = 0 + _Size("Size", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + + sampler2D _MainTex; + float4 _Color; + float _ColorR; + float _ColorG; + float _ColorB; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 tex = tex2D(_MainTex, uv) * IN.color; + tex.r += _ColorR; + tex.g += _ColorG; + tex.b += _ColorB; + + float4 c = float4(tex.rgb,tex.a * 1 - _Alpha); + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorRGB.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorRGB.shader.meta new file mode 100644 index 00000000..d7680fa0 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_ColorRGB.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a23f48cada2f0847ab13a92dbda14fe +timeCreated: 1529660417 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CompressionFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CompressionFX.shader new file mode 100644 index 00000000..a03f4a7d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CompressionFX.shader @@ -0,0 +1,85 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/CompressionFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float4 _Color; + float _Distortion; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + float rng2(float2 seed) + { + return frac(sin(dot(seed * floor(50 + (_Time + 0.1) * 12.), float2(127.1, 311.7))) * 43758.5453123); + } + + float rng(float seed) + { + return rng2(float2(seed, 1.0)); + } + + void surf(Input IN, inout SurfaceOutput o) + { + float2 uv = IN.uv_MainTex; + float2 blockS = floor(uv * float2(24., 19.))*4.0; + float2 blockL = floor(uv * float2(38., 14.))*4.0; + float r = rng2(uv); + float lineNoise = pow(rng2(blockS), 3.0) *_Distortion* pow(rng2(blockL), 3.0); + float4 col1 = tex2D(_MainTex, uv + float2(lineNoise * 0.02 * rng(2.0), 0))*IN.color; + float4 result; + result = float4(float3(col1.x, col1.y, col1.z), 1.0); + result.a = col1.a * 1 - _Alpha; + o.Albedo = result.rgb * result.a; + o.Alpha = result.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CompressionFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CompressionFX.shader.meta new file mode 100644 index 00000000..161b538d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_CompressionFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c6c90c88aa59c9646aff65b0c9b8cc45 +timeCreated: 1529660459 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DesintegrationFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DesintegrationFX.shader new file mode 100644 index 00000000..9c464e82 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DesintegrationFX.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/DesintegrationFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _ColorX("Tint", Color) = (1,1,1,1) + _Size("Size", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float _Distortion; + float4 _Color; + float4 _ColorX; + float _Alpha; + float _Size; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + float r(float2 c) + { + return frac(43.*sin(c.x + 7.*c.y)*_Size); + } + + float n(float2 p) + { + float2 i = floor(p), w = p - i, j = float2 (1.,0.); + w = w*w*(3. - w - w); + return lerp(lerp(r(i), r(i + j), w.x), lerp(r(i + j.yx), r(i + 1.), w.x), w.y); + } + + float a(float2 p) + { + float m = 0., f = 2.; + for (int i = 0; i<9; i++) { m += n(f*p) / f; f += f; } + return m; + } + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 tex = tex2D(_MainTex, uv) * IN.color; + float t = frac(_Distortion*0.9999); + float4 c = smoothstep(t / 1.2, t + .1, a(3.5*uv)); + c = tex*c; + c.r = lerp(c.r,c.r*(1 - c.a) + _ColorX.r,_Distortion); + c.g = lerp(c.g,c.g*(1 - c.a) + _ColorX.g,_Distortion); + c.b = lerp(c.b,c.b*(1 - c.a) + _ColorX.b,_Distortion); + float4 r = float4(c.rgb,c.a * 1 - _Alpha); + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DesintegrationFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DesintegrationFX.shader.meta new file mode 100644 index 00000000..ae5ba812 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DesintegrationFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f04621984ee14c046bc6c0a036831d2d +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DestroyedFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DestroyedFX.shader new file mode 100644 index 00000000..c99e1777 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DestroyedFX.shader @@ -0,0 +1,93 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/DestroyedFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Size("Size", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float4 _Color; + float _Distortion; + float _Alpha; + float _Size; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + float r(float2 c) { + return frac(43.*sin(c.x + 7.*c.y)*_Size); + } + + float n(float2 p) { + float2 i = floor(p), w = p - i, j = float2 (1.,0.); + w = w*w*(3. - w - w); + return lerp(lerp(r(i), r(i + j), w.x), lerp(r(i + j.yx), r(i + 1.), w.x), w.y); + } + + float a(float2 p) { + float m = 0., f = 2.; + for (int i = 0; i<9; i++) { m += n(f*p) / f; f += f; } + return m; + } + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 tex = tex2D(_MainTex, uv)* IN.color; + float t = frac(_Distortion*0.9999); + float4 c = smoothstep(t / 1.2, t + .1, a(3.5*uv)); + c = tex*c; + c.r = lerp(c.r,c.r*15.0*(1 - c.a) * 8,_Distortion); + c.g = lerp(c.g,c.g*10.0*(1 - c.a) * 4,_Distortion); + c.b = lerp(c.b,c.b*5.0*(1 - c.a),_Distortion); + float4 r = float4(c.rgb,c.a * 1 - _Alpha); + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DestroyedFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DestroyedFX.shader.meta new file mode 100644 index 00000000..c866173d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_DestroyedFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e7ce28749ba862d4e8281fb16cd62bbb +timeCreated: 1529660465 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Distortion.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Distortion.shader new file mode 100644 index 00000000..a6732966 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Distortion.shader @@ -0,0 +1,85 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Distortion" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _OffsetX("OffsetX", Range(0,128)) = 0 + _OffsetY("OffsetY", Range(0,128)) = 0 + _DistanceX("DistanceX", Range(0,1)) = 0 + _DistanceY("DistanceY", Range(0,1)) = 0 + _WaveTimeX("WaveTimeX", Range(0,360)) = 0 + _WaveTimeY("WaveTimeY", Range(0,360)) = 0 + _Color("Tint", Color) = (1,1,1,1) + _Alpha("Alpha", Range(0,1)) = 1.0 + + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + + sampler2D _MainTex; + float _OffsetX; + float _OffsetY; + float4 _Color; + float _DistanceX; + float _DistanceY; + float _WaveTimeX; + float _WaveTimeY; + float _Alpha; + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + p.x = p.x + sin(p.y*_OffsetX + _WaveTimeX)*_DistanceX; + p.y = p.y + cos(p.x*_OffsetY + _WaveTimeY)*_DistanceY; + float4 mainColor = tex2D(_MainTex, p)* IN.color; + mainColor.a -= _Alpha; + + o.Albedo = mainColor.rgb * mainColor.a; + o.Alpha = mainColor.a; + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Distortion.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Distortion.shader.meta new file mode 100644 index 00000000..b1cc1059 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Distortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 92942480ef5343a41a4b890389603904 +timeCreated: 1529660443 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EdgeColor.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EdgeColor.shader new file mode 100644 index 00000000..2192c664 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EdgeColor.shader @@ -0,0 +1,84 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/EdgeColor" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Color("_Color", Color) = (1,1,1,1) + _ColorX("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float _Distortion; + float4 _ColorX; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color; + } + float4 getPixel(in int x, in int y, float2 uv) + { + return tex2D(_MainTex, (uv + float2(x, y) / 64.0)); + } + void surf(Input IN, inout SurfaceOutput o) + { + float2 uv = IN.uv_MainTex; + + + float4 sum = abs(getPixel(0, 1, uv) - getPixel(0, -1, uv)); + sum += abs(getPixel(1, 0, uv) - getPixel(-1, 0, uv)); + sum /= 2.0; + float4 color = getPixel(0, 0, uv)*IN.color; + color += length(sum) * _ColorX; + color.a = color.a*(1 - _Alpha); + + + + o.Albedo = color.rgb * color.a; + o.Alpha = color.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EdgeColor.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EdgeColor.shader.meta new file mode 100644 index 00000000..56320d1c --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EdgeColor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2803e89bd2ce7bf47a3930fb9b2d9aa7 +timeCreated: 1529660420 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EnergyBar.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EnergyBar.shader new file mode 100644 index 00000000..36679ac6 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EnergyBar.shader @@ -0,0 +1,93 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/EnergyBar" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _Value1("_Value1", Range(0,1)) = 1 + _Value2("_Value2", Range(0,1)) = 1 + _Value3("_Value3", Range(0,1)) = 1 + _Value4("_Value4", Range(0,1)) = 1 + _Value5("_Value5", Range(0,1)) = 1 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + sampler2D _MainTex; + float4 _Color; + float _Size; + float _Value1; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float4 c = tex2D(_MainTex,p) * IN.color; + c.a = c.a*(1 - _Alpha); + float2 uv = IN.uv_MainTex; + float4 mainColor = tex2D(_MainTex, uv)* IN.color; + float energy = smoothstep(_Value1 - _Value2,_Value1 + _Value2, uv.x); + float xx = smoothstep(0.15 - 0.1,0.15 + 0.1, uv.x)*_Value1; + float3 C1 = float3(1,0,0); + float3 C2 = mainColor.rgb; + C1 = lerp(mainColor.rgb,C1,_Value4); + C1 = lerp(C1,mainColor.rgb,xx); + float3 CR = lerp(C1,C2,_Value1); + float4 CRA = float4(CR,mainColor.a); + mainColor = lerp(CRA,mainColor - float4(_Value3,_Value3,_Value3,1 - _Value5),energy); + mainColor.a = mainColor.a - _Alpha; + + o.Albedo = mainColor.rgb * mainColor.a; + o.Alpha = mainColor.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EnergyBar.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EnergyBar.shader.meta new file mode 100644 index 00000000..910ee88b --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_EnergyBar.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b20af1734e6bb6e468332fbdea44c642 +timeCreated: 1529660455 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Fire.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Fire.shader new file mode 100644 index 00000000..9bb62f0f --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Fire.shader @@ -0,0 +1,114 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Fire" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + [HideInInspector] _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector] _Color("Tint", Color) = (1,1,1,1) + [HideInInspector] _Value1("_Value1", Range(0,1)) = 0 + [HideInInspector] _Value2("_Value2", Range(0,1)) = 0 + [HideInInspector] _Value3("_Value3", Range(0,1)) = 0 + [HideInInspector] _Value4("_Value4", Range(0,1)) = 0 + [HideInInspector] _Value5("_Value5", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _Value1; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float speed = _Value1; + float2 uv = IN.uv_MainTex; + uv += float2(0,0); + uv /= 8; + uv /= 1.4; + uv -= float2(-0.022,-0.022); + float tm = _Time; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + float4 t2 = tex2D(_MainTex2, uv); + + uv = IN.uv_MainTex; + uv /= 8; + uv += float2(-0.05,0); + tm += 0.2; + uv /= 1.4; + uv -= float2(-0.022,-0.022); + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + t2 += tex2D(_MainTex2, uv); + + uv = IN.uv_MainTex; + uv /= 8; + uv += float2(-0.025,-0.02); + tm += 0.4; + uv /= 1.4; + uv -= float2(-0.022,-0.022); + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + t2 += tex2D(_MainTex2, uv); + + float4 t = tex2D(_MainTex, IN.uv_MainTex + float2(t2.r / 64,t2.r / 64))*IN.color; + t2.a = t.a*t2.r; + t.rgb = t2*_Value2; + float4 c = float4(t.rgb,t.a*t2.r*(1 - _Alpha)); + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Fire.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Fire.shader.meta new file mode 100644 index 00000000..d6047252 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Fire.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b07aad98f0a2da4408f9f6997537f67b +timeCreated: 1529660454 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Flame.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Flame.shader new file mode 100644 index 00000000..526e949c --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Flame.shader @@ -0,0 +1,111 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Flame" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_MainTex2 ("Base (RGB)", 2D) = "white" {} +_Speed("_Speed", Range(4,128)) = 4 +_Intensity("_Intensity", Range(4,128)) = 4 +_Color("_Color", Color) = (1,1,1,1) +_Alpha("Alpha", Range(0,1)) = 1.0 +[HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 +[HideInInspector]_DstBlend("_DstBlend", Float) = 0 +[HideInInspector]_BlendOp("_BlendOp",Float) = 0 +[HideInInspector]_Z("_Z", Float) = 0 +} + +SubShader +{ +Tags +{ +"IgnoreProjector" = "True" +"RenderType" = "TransparentCutout" +"PreviewType" = "Plane" +"CanUseSpriteAtlas" = "True" +} +Cull Off +Lighting Off +ZWrite[_Z] +BlendOp[_BlendOp] +Blend[_SrcBlend][_DstBlend] + +CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 +sampler2D _MainTex; +sampler2D _MainTex2; +float _Speed; +float _Intensity; +float _Alpha; +float4 _Color; + +struct Input +{ +float2 uv_MainTex; +float4 color; +}; + +void vert(inout appdata_full v, out Input o) +{ +v.vertex = UnityPixelSnap(v.vertex); +UNITY_INITIALIZE_OUTPUT(Input, o); +o.color = v.color * _Color; +} + +void surf(Input IN, inout SurfaceOutput o) +{ + + + float2 uv = IN.uv_MainTex; + float2 _uv = uv; + float _TimeX=_Time*128*_Speed; + + uv -= float2(0.5,0.5); + float2 centerUV = uv; + + + float2 offset = float2(0.0, -_TimeX * 0.15); + + // flame thickness + float2 uv2= IN.uv_MainTex +offset; + float2 uv3= IN.uv_MainTex +offset*1.5; + uv2.y/=16; + uv3.y/=12; + float flame = 1.3 - length(uv.x) * 3.0; + float4 t3 = tex2D(_MainTex2,uv3); + float4 t2 = tex2D(_MainTex2,uv2); + float variationH = t3.g-t2.g; + uv2.x += IN.uv_MainTex.y*cos(_TimeX)/8; + float4 t = tex2D(_MainTex, float2(uv2.x, IN.uv_MainTex.y)); + flame *= smoothstep(1., variationH * _Intensity, _uv.y); + flame = clamp(flame, 0.0, 1.0); + flame = pow(flame, 3.); + flame /= smoothstep(1.1, -0.1, _uv.y*t.a); + // colors + + flame *= t.a; + + // colors + float4 col = lerp(float4(1.0, 1., 0.0, 0.0), float4(1.0, 1.0, .6, 0.0), flame); + col = lerp(float4(1.0, .0, 0.0, 0.0), col, smoothstep(0.0, 1.6, flame)); + col = lerp(float4(0.0, .0, 1.0, 0.0), col, smoothstep(0.0, 0.7, flame)); + + t2=col*1.2; + t2.a = t2.r*flame*_Alpha; + t2.rgb= t2*IN.color; + + o.Albedo = t2.rgb * t2.a; + o.Alpha = t2.a; + +clip(o.Alpha-0.05); +} +ENDCG +} + +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Flame.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Flame.shader.meta new file mode 100644 index 00000000..3da51fbf --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Flame.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7567cf2d042dfb741b74114d385f57d6 +timeCreated: 1529660436 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Frozen.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Frozen.shader new file mode 100644 index 00000000..e988e782 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Frozen.shader @@ -0,0 +1,111 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Frozen" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + [HideInInspector] _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector] _Color("Tint", Color) = (1,1,1,1) + [HideInInspector] _Value1("_Value1", Range(0,1)) = 0 + [HideInInspector] _Value2("_Value2", Range(0,1)) = 0 + [HideInInspector] _Value3("_Value3", Range(0,1)) = 0 + [HideInInspector] _Value4("_Value4", Range(0,1)) = 0 + [HideInInspector] _Value5("_Value5", Range(0,1)) = 0 + _Color("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _Value1; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + float hardLight(float s, float d) + { + return (s < 0.5) ? 2.0 * s * d : 1.0 - 2.0 * (1.0 - s) * (1.0 - d); + } + + float3 hardLight(float3 s, float3 d) + { + float3 c; + c.x = hardLight(s.x,d.x); + c.y = hardLight(s.y,d.y); + c.z = hardLight(s.z,d.z); + return c; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float speed = _Time * 2; + float2 uv = IN.uv_MainTex; + uv = uv*(1 - (_Value2*0.4)) + float2(_Value2*0.2,_Value2*0.2); + float4 t2 = tex2D(_MainTex2, uv); + uv = uv*(1 - (_Value2*0.4)) + float2(_Value2*0.2,_Value2*0.2); + float4 t3 = tex2D(_MainTex2, uv) * 2; + uv = IN.uv_MainTex + float2(-_Value2 - speed,0); + float4 t4 = tex2D(_MainTex2, uv + float2(t2.r,t2.r))*0.5; + float tx = t3.b; + tx = lerp(0,t3.b*0.015,_Value2); + float4 td = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + float4 t = tex2D(_MainTex, IN.uv_MainTex + float2(tx,tx))*IN.color; + t2.a = t.a; + t2.rgb = float3(t2.r / 10,t2.r / 1.5,t2.r); + float3 g = (t.r + t.g + t.b) / 3; + float3 r = smoothstep(_Value1,_Value1 + 0.1,g) + .2; + t.rgb = lerp(t.rgb,hardLight(g,t2.rgb) + t2.b*r*t3.b + t4.g,_Value2); + float4 c = float4(t.rgb,t.a*(1 - _Alpha)); + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Frozen.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Frozen.shader.meta new file mode 100644 index 00000000..4c9b9077 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Frozen.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9bd9d73668e315d4a9235ac654744dc2 +timeCreated: 1529660446 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ghost.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ghost.shader new file mode 100644 index 00000000..42a763bb --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ghost.shader @@ -0,0 +1,88 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Ghost" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _ClipLeft("Clipping Left", Range(0,1)) = 1 + _ClipRight("Clipping Right", Range(0,1)) = 1 + _ClipUp("Clipping Up", Range(0,1)) = 1 + _ClipDown("Clipping Down", Range(0,1)) = 1 + _offset("offset", Range(0,1)) = 1 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float4 _Color; + float _Alpha; + float _offset; + float _ClipLeft; + float _ClipRight; + float _ClipUp; + float _ClipDown; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 mainColor = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + float alpha = mainColor.a; + float c1 = 1; + float noffset = _offset; + if (IN.uv_MainTex.y > _ClipUp) c1 = saturate(((1 + noffset) / (1 - _ClipUp))*(1 - IN.uv_MainTex.y) - noffset); + if (IN.uv_MainTex.y < 1 - _ClipDown) c1 *= saturate(((1 + noffset) / (1 - _ClipDown))*IN.uv_MainTex.y - noffset); + if (IN.uv_MainTex.x > _ClipRight) c1 *= saturate(((1 + noffset) / (1 - _ClipRight))*(1 - IN.uv_MainTex.x) - noffset); + if (IN.uv_MainTex.x < 1 - _ClipLeft) c1 *= saturate(((1 + noffset) / (1 - _ClipLeft))*IN.uv_MainTex.x - noffset); + mainColor.a = (alpha*c1) - _Alpha; + float4 c = float4(mainColor.rgb,mainColor.a); + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ghost.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ghost.shader.meta new file mode 100644 index 00000000..37fbf380 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ghost.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e5642f27904f8cf4d87ea3a52967716d +timeCreated: 1529660464 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldFX.shader new file mode 100644 index 00000000..249dfd84 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldFX.shader @@ -0,0 +1,140 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/GoldFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + + float3 Metal(float _t) + { + + float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) + / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); + + float v = (0.317398726 + 4.22806245e-5*_t + 4.20481691e-8*_t*_t) + / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); + + float x = 3.0 * u / (2.0 * u - 8.0 * v + 4.0); + float y = 2.0 * v / (2.0 * u - 8.0 * v + 4.0); + float z = 1.0 - x - y; + + float Y = 1.0; + float X = (Y / y) * x; + float Z = (Y / y) * z; + + float3 RGB = float3(X / 2,Y * 2,Z) / _Distortion; + + RGB.x = RGB.x * pow(0.0006*_t, 4.0); + RGB.y = RGB.y * pow(0.0004*_t, 4.0); + RGB.z = RGB.z * pow(0.0004*_t, 4.0); + + return RGB; + } + + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + float4 rainbow(float t) + { + t = mod(t,1.0); + float tx = t * 6.0; + + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + + return float4(1.0, 1.0, 1.0,r); + } + + float4 plasma(float2 uv) + { + float2 tuv = uv; + uv *= 2.5; + float a = 1.1 + _Time * 20 * 2.25; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + n += tex2D(_MainTex, tuv).r * 0.2 + tex2D(_MainTex, tuv).g * 0.4 + tex2D(_MainTex, tuv).b * 0.2; + + return rainbow(n); + } + + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 noise = tex2D(_MainTex, uv)* IN.color; + float lum = dot(noise.rgb, float3 (0.2126, 0.7152, 0.0722)); + float maxTemp = 4000.0; + float tempScale = maxTemp; + float3 c = Metal(lum * tempScale); + float alpha = tex2D(_MainTex, IN.uv_MainTex).a*IN.color.a; + float4 sortie = plasma(IN.uv_MainTex); + sortie.a = sortie.a*alpha - _Alpha; + sortie.r = sortie.a; + sortie.g = sortie.a; + sortie.b = sortie.a; + sortie.rgb = c.rgb + (1 - sortie.a); + float4 r= float4(sortie.rgb,noise.a * 1 - _Alpha); + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldFX.shader.meta new file mode 100644 index 00000000..c3e1dd05 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e4ff7909ae227524ca97df27eee4af1c +timeCreated: 1529660463 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldenFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldenFX.shader new file mode 100644 index 00000000..107345a5 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldenFX.shader @@ -0,0 +1,89 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/GoldenFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + + + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float2 step = 0.004; + float4 tex = tex2D(_MainTex, uv); + float calc = 1.5 *_Distortion; + float3 texA = tex2D(_MainTex, uv + float2(-step.x, -step.y) * calc).rgb; + float3 texB = tex2D(_MainTex, uv + float2(step.x, -step.y) * calc).rgb; + float3 texC = tex2D(_MainTex, uv + float2(-step.x, step.y) * calc).rgb; + float3 texD = tex2D(_MainTex, uv + float2(step.x, step.y) * calc).rgb; + float shadeA = dot(texA, 0.333333); + float shadeB = dot(texB, 0.333333); + float shadeC = dot(texC, 0.333333); + float shadeD = dot(texD, 0.333333); + float shade = 15.0 * pow(max(abs(shadeA - shadeD), abs(shadeB - shadeC)), 0.5); + float3 col = lerp(float3(0.1, 0.18, 0.3), float3(0.4, 0.3, 0.2), shade); + tex.a = tex.a * 1 - _Alpha; + float4 r = float4(col,tex.a); + r *= IN.color; + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldenFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldenFX.shader.meta new file mode 100644 index 00000000..32018361 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GoldenFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: adbb8fb7587ac3b41a6e3969cec52b55 +timeCreated: 1529660454 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassFX.shader new file mode 100644 index 00000000..95ddfd18 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassFX.shader @@ -0,0 +1,88 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/GrassFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Wind("_Wind", Range(0.0, 10.0)) = 1 + _Wind2("_Wind2", Range(0.0, 10.0)) = 1 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float _Distortion; + float _Wind; + float _Wind2; + float _Alpha; + float _Speed; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float time = _Time * 8 * _Speed; + + float sn = uv.x + _Wind; + float sy = uv.y / _Distortion; + uv.x = abs(lerp(uv.x,sn,sy)); + uv.x = fmod(uv.x,1); + + + float4 rcol = tex2D(_MainTex, uv)*IN.color; + rcol.a = rcol.a * 1 - _Alpha; + + + o.Albedo = rcol.rgb * rcol.a; + o.Alpha = rcol.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassFX.shader.meta new file mode 100644 index 00000000..2f853f2f --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 813f54f908108a244a37415cb7786a1f +timeCreated: 1529660439 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassMultiFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassMultiFX.shader new file mode 100644 index 00000000..690e1f87 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassMultiFX.shader @@ -0,0 +1,123 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/GrassMultiFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Wind("_Wind", Range(0.0, 10.0)) = 1 + _Wind2("_Wind2", Range(0.0, 10.0)) = 1 + _Wind3("_Wind2", Range(0.0, 10.0)) = 1 + _Wind4("_Wind2", Range(0.0, 10.0)) = 1 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Distortion; + float _Wind; + float _Wind2; + float _Wind3; + float _Wind4; + float _Alpha; + float _Speed; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float2 uv2 = IN.uv_MainTex + float2(0.2,0.01); + float2 uv3 = IN.uv_MainTex + float2(0.4,0.02); + float2 uv4 = IN.uv_MainTex + float2(0.6,0.03); + float time = _Time * 8 * _Speed; + float sn = uv.x + _Wind; + float sy = uv.y / _Distortion; + uv.x = abs(lerp(uv.x,sn,sy)); + uv.x = fmod(uv.x,1); + sn = uv2.x + _Wind2; + sy = uv2.y / _Distortion; + uv2.x = abs(lerp(uv2.x,sn,sy)); + uv2.x = fmod(uv2.x,1); + sn = uv3.x + _Wind3; + sy = uv3.y / _Distortion; + uv3.x = abs(lerp(uv3.x,sn,sy)); + uv3.x = fmod(uv3.x,1); + sn = uv4.x + _Wind4; + sy = uv4.y / _Distortion; + uv4.x = abs(lerp(uv4.x,sn,sy)); + uv4.x = fmod(uv4.x,1); + float4 r1 = tex2D(_MainTex, uv)* IN.color; + float4 r2 = tex2D(_MainTex, uv2)* IN.color; + float4 r3 = tex2D(_MainTex, uv3)* IN.color; + float4 r4 = tex2D(_MainTex, uv4)* IN.color; + r1.a -= 0.01; + r2.a -= 0.01; + r3.a -= 0.01; + r4.a -= 0.01; + r1.rgb -= 0.195; + r2.rgb -= 0.130; + r3.rgb -= 0.065; + r4.rgb -= 0; + float4 mo = r1 * (1.0 - (r2.a)); + float4 bo = r2 * r2.a; + r1 = mo + bo; + mo = r1 * (1.0 - (r3.a)); + bo = r3 * r3.a; + r1 = mo + bo; + mo = r1 * (1.0 - (r4.a)); + bo = r4 * r4.a; + r1 = mo + bo; + r1.a = r1.a * 1 - _Alpha; + + o.Albedo = r1.rgb * r1.a; + o.Alpha = r1.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassMultiFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassMultiFX.shader.meta new file mode 100644 index 00000000..20eacb33 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrassMultiFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dd2f03fcecec3144a9cee576f31f8e61 +timeCreated: 1529660461 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrayScale.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrayScale.shader new file mode 100644 index 00000000..188b1a7c --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrayScale.shader @@ -0,0 +1,72 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/GrayScale" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Alpha("Alpha", Range(0,1)) = 1.0 + _Color("_Color", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + uniform float _EffectAmount; + sampler2D _MainTex; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 c = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + c.rgb = lerp(c.rgb, dot(c.rgb, float3(0.3, 0.59, 0.11)), _EffectAmount); + c.a = c.a - _Alpha; + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrayScale.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrayScale.shader.meta new file mode 100644 index 00000000..d36fd416 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_GrayScale.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 75d23feadf587044b8968a8e7aba8009 +timeCreated: 1529660437 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_HSV.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_HSV.shader new file mode 100644 index 00000000..5df096df --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_HSV.shader @@ -0,0 +1,103 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/HSV" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Alpha("Alpha", Range(0,1)) = 1.0 + _Color("_Color", Color) = (1,1,1,1) + _HueShift("HueShift", Range(0,360)) = 0 + + _Sat("Saturation", Float) = 1 + _Val("Value", Float) = 1 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _HueShift; + float _Sat; + float _Val; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + float3 shift_col(float3 RGB, float3 shift) + { + + float3 RESULT = float3(RGB); + float a1 = shift.z*shift.y; + float a2 = shift.x*3.14159265 / 180; + float VSU = a1*cos(a2); + float VSW = a1*sin(a2); + + RESULT.x = (.299*shift.z + .701*VSU + .168*VSW)*RGB.x + + (.587*shift.z - .587*VSU + .330*VSW)*RGB.y + + (.114*shift.z - .114*VSU - .497*VSW)*RGB.z; + + RESULT.y = (.299*shift.z - .299*VSU - .328*VSW)*RGB.x + + (.587*shift.z + .413*VSU + .035*VSW)*RGB.y + + (.114*shift.z - .114*VSU + .292*VSW)*RGB.z; + + RESULT.z = (.299*shift.z - .3*VSU + 1.25*VSW)*RGB.x + + (.587*shift.z - .588*VSU - 1.05*VSW)*RGB.y + + (.114*shift.z + .886*VSU - .203*VSW)*RGB.z; + + return (RESULT); + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 c = tex2D(_MainTex, IN.uv_MainTex)* IN.color; + float3 shift = float3(_HueShift, _Sat, _Val); + c.rgb = shift_col(c, shift); + c.a = c.a - _Alpha; + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_HSV.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_HSV.shader.meta new file mode 100644 index 00000000..b8a66b17 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_HSV.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 650ced8851fa15b42b1a8a310d8106e0 +timeCreated: 1529660434 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Heat.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Heat.shader new file mode 100644 index 00000000..6a12538e --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Heat.shader @@ -0,0 +1,80 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Heat" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float _Speed; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float time = _Time * 8 * _Speed; + + uv.x += (sin(uv.y + (time * 0.7) * 25) * 0.009*_Distortion) + (sin(uv.y + time) * 0.005); + uv.y += (cos(uv.y + (time * 0.7) * 25) * 0.009*_Distortion) + (cos(uv.x + time) * 0.005); + + float4 rcol = tex2D(_MainTex, uv)*IN.color; + rcol.a = rcol.a * 1 - _Alpha; + + o.Albedo = rcol.rgb * rcol.a; + o.Alpha = rcol.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Heat.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Heat.shader.meta new file mode 100644 index 00000000..17cf6757 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Heat.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 82fe60c671f79264aa9250341e604425 +timeCreated: 1529660441 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram.shader new file mode 100644 index 00000000..718d987f --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram.shader @@ -0,0 +1,142 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Hologram" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Size("Size", Range(0,1)) = 0 + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Size; + float _Distortion; + float _Alpha; + float4 _Color; + float _TimeX; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + inline float mod(float x,float modu) { + return x - floor(x * (1.0 / modu)) * modu; + } + + inline float noise(float2 p) + { _TimeX=_Time.y; + float samplex = tex2D(_MainTex,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; + samplex *= samplex; + return samplex; + } + + + inline float onOff(float a, float b, float c) + { _TimeX=_Time.y; + return step(c, sin(_TimeX + a*cos(_TimeX*b))); + } + + inline float ramp(float y, float start, float end) + { + float inside = step(start,y) - step(end,y); + float fact = (y - start) / (end - start)*inside; + return (1. - fact) * inside; + + } + + inline float stripes(float2 uv) + { + _TimeX=_Time.y; + float noi = noise(uv*float2(0.5,1.) + float2(6.,3.))*_Distortion * 3; + return ramp(mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)),1.),.5,.6)*noi; + } + + inline float4 getVideo(float2 uv) + { + _TimeX=_Time.y; + float2 look = uv; + float window = 1. / (1. + 20.*(look.y - mod(_TimeX / 4.,1.))*(look.y - mod(_TimeX / 4.,1.))); + look.x = look.x + sin(look.y*30. + _TimeX) / (50.*_Distortion)*onOff(4.,4.,.3)*(1. + cos(_TimeX*80.))*window; + + float vShift = .4*onOff(2.,3.,.9)*(sin(_TimeX)*sin(_TimeX*20.) + + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); + + look.y = mod(look.y + vShift, 1.); + + float4 video; + float4 videox = tex2D(_MainTex,look); + + video.r = tex2D(_MainTex,look - float2(.05,0.)*onOff(2.,1.5,.9)).r; + video.g = videox.g; + video.b = tex2D(_MainTex,look + float2(.05,0.)*onOff(2.,1.5,.9)).b; + video.a = videox.a; + + return video; + } + + void surf(Input IN, inout SurfaceOutput o) + { + _TimeX=_Time.y; + float2 uv = IN.uv_MainTex; + float alpha = tex2D(_MainTex,uv).a; + + float4 video = getVideo(uv)*IN.color; + float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); + float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); + + video += stripes(uv); + video += noise(uv*2.) / 2.; + video.r *= vignette; + + video *= (12. + mod(uv.y*30. + _TimeX,1.)) / 13.; + video.a = video.a + (frac(sin(dot(uv.xy*_TimeX,float2(12.9898,78.233))) * 43758.5453))*.5; + video.a = (video.a*.3)*alpha*vignette * 2 * (1 - _Alpha)*IN.color.a; + + o.Albedo = video.rgb * video.a; + o.Alpha = video.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram.shader.meta new file mode 100644 index 00000000..e2501e38 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 47d28d58fba27854bb6db8c4302394d1 +timeCreated: 1529660426 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram2.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram2.shader new file mode 100644 index 00000000..74a47baa --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram2.shader @@ -0,0 +1,141 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Hologram2" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Size("Size", Range(0,1)) = 0 + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Size; + float _Distortion; + float _Alpha; + float4 _Color; + float _TimeX; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + inline float mod(float x,float modu) { + return x - floor(x * (1.0 / modu)) * modu; + } + + inline float noise(float2 p) + { + _TimeX=_Time.y; + float samplex = tex2D(_MainTex,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; + samplex *= samplex; + return samplex; + } + + + inline float onOff(float a, float b, float c) + { + _TimeX=_Time.y; + return step(c, sin(_TimeX + a*cos(_TimeX*b))); + } + + inline float ramp(float y, float start, float end) + { + float inside = step(start,y) - step(end,y); + float fact = (y - start) / (end - start)*inside; + return (1. - fact) * inside; + + } + + inline float stripes(float2 uv) + { + _TimeX=_Time.y; + float noi = noise(uv*float2(0.5,1.) + float2(6.,3.))*_Distortion * 3; + return ramp(mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)),1.),.5,.6)*noi; + } + + inline float4 getVideo(float2 uv) + { + _TimeX=_Time.y; + float2 look = uv; + float window = 1. / (1. + 20.*(look.y - mod(_TimeX / 4.,1.))*(look.y - mod(_TimeX / 4.,1.))); + look.x = look.x + sin(look.y*30. + _TimeX) / (50.*_Distortion)*onOff(4.,4.,.3)*(1. + cos(_TimeX*80.))*window; + + float vShift = .4*onOff(2.,3.,.9)*(sin(_TimeX)*sin(_TimeX*20.) + + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); + + look.y = mod(look.y + vShift, 1.); + + float4 video; + float4 video2 = tex2D(_MainTex,look); + video = video2; + float onoffx = onOff(2.,1.5,.9); + video.r = tex2D(_MainTex,look - float2(.05,0.)*onoffx).r; + video.b = tex2D(_MainTex,look + float2(.05,0.)*onoffx).b; + + return video; + } + void surf(Input IN, inout SurfaceOutput o) + { + + _TimeX=_Time.y; + float2 uv = IN.uv_MainTex; + float alpha = tex2D(_MainTex,uv).a; + float4 video = getVideo(uv)* IN.color; + float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); + float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); + video += stripes(uv); + video += noise(uv*2.) / 2.; + video.r *= vignette; + video.a = video.a + (frac(sin(dot(uv.xy*_TimeX,float2(12.9898,78.233))) * 43758.5453))*.5; + video *= (12. + mod(uv.y*30. + _TimeX,1.)) / 13.; + video.a = (video.a*.3)*alpha*vignette * 2 * (1 - _Alpha)*IN.color.a; + + + o.Albedo = video.rgb * video.a; + o.Alpha = video.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram2.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram2.shader.meta new file mode 100644 index 00000000..e33a95b5 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram2.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3c75fed3018ee97449f47d0294e4af67 +timeCreated: 1529660423 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram3.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram3.shader new file mode 100644 index 00000000..c1e07a09 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram3.shader @@ -0,0 +1,161 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Hologram3" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Size("Size", Range(0,1)) = 0 + _Distortion("Distortion", Range(0,1)) = 0 + _TimeX("TimeX", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Color("_Color", Color) = (1,1,1,1) + _ColorX("_ColorX", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + + sampler2D _MainTex; + float _Size; + float _Distortion; + float _Alpha; + float4 _Color; + float4 _ColorX; + float _TimeX; + + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + + inline float mod(float x,float modu) { + return x - floor(x * (1.0 / modu)) * modu; + } + + inline float noise(float2 p) + { + _TimeX=_Time.y; + float samplex = tex2D(_MainTex,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; + samplex *= samplex; + return samplex; + } + + + inline float onOff(float a, float b, float c) + { + _TimeX=_Time.y; + return step(c, sin(_TimeX + a*cos(_TimeX*b))); + } + + inline float ramp(float y, float start, float end) + { + float inside = step(start,y) - step(end,y); + float fact = (y - start) / (end - start)*inside; + return (1. - fact) * inside; + + } + + inline float stripes(float2 uv) + { + _TimeX=_Time.y; + float noi = noise(uv*float2(0.5,1.) + float2(6.,3.))*_Distortion * 3; + return ramp(mod(uv.y*4. + _TimeX / 2. + sin(_TimeX + sin(_TimeX*0.63)),1.),.5,.6)*noi; + } + + inline float4 getVideo(float2 uv) + { + _TimeX=_Time.y; + float2 look = uv; + float window = 4. / (1. + 20.*(look.y - mod(_TimeX / 1.,1.))*(look.y - mod(_TimeX / 10.,1.))); + look.x = look.x + sin(look.y*30. + _TimeX) / (50.*_Distortion)*onOff(1.,4.,.3)*(1. + cos(_TimeX*80.))*window; + + float vShift = .4*onOff(2.,3.,.9)*(sin(_TimeX)*sin(_TimeX*200.) + + (0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); + + look.y = mod(look.y + vShift, 1.); + + float4 video; + + video.r = tex2D(_MainTex,look - float2(.05,0.)*onOff(2.,1.5,.9)).r; + float4 videox = tex2D(_MainTex,look); + video.g = videox.g; + video.b = tex2D(_MainTex,look + float2(.05,0.)*onOff(2.,1.5,.9)).b; + video.a = videox.a; + + return video; + } + + inline float2 screenDistort(float2 uv) + { + uv -= float2(.5,.5); + uv = uv*4.2*(1. / 4.2 + 2.*uv.x*uv.x*uv.y*uv.y); + uv += float2(.5,.5); + return uv; + } + + void surf(Input IN, inout SurfaceOutput o) + { + _TimeX=_Time.y; + float2 uv = IN.uv_MainTex; + float alpha = tex2D(_MainTex,uv).a; + + uv = screenDistort(uv); + float4 video = getVideo(uv)* IN.color; + float vigAmt = 3. + .3*sin(_TimeX + 5.*cos(_TimeX*5.)); + float vignette = (1. - vigAmt*(uv.y - .5)*(uv.y - .5))*(1. - vigAmt*(uv.x - .5)*(uv.x - .5)); + + video += stripes(uv); + video += noise(uv*2.) / 2.; + video.r *= vignette; + + video.rgb = video.r*_ColorX; + + video *= (12. + mod(uv.y*30. + _TimeX,1.)) / 13.; + video.a = video.a + (frac(sin(dot(uv.xy*_TimeX,float2(12.9898,78.233))) * 43758.5453))*.5; + video.a = (video.a*.4)*alpha*vignette * 4 * (1 - _Alpha)*IN.color.a; + + o.Albedo = video.rgb * video.a; + o.Alpha = video.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram3.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram3.shader.meta new file mode 100644 index 00000000..0e9730c0 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Hologram3.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1f26619d3db43b442bdfc43c207e4108 +timeCreated: 1529660418 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ice.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ice.shader new file mode 100644 index 00000000..7be164d3 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ice.shader @@ -0,0 +1,127 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Ice" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + [HideInInspector] _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector] _Color("Tint", Color) = (1,1,1,1) + [HideInInspector] _Value1("_Value1", Range(0,1)) = 0 + [HideInInspector] _Value2("_Value2", Range(0,1)) = 0 + [HideInInspector] _Value3("_Value3", Range(0,1)) = 0 + [HideInInspector] _Value4("_Value4", Range(0,1)) = 0 + [HideInInspector] _Value5("_Value5", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _Value1; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float speed = _Value1; + float2 uv = IN.uv_MainTex; + uv += float2(0,0); + uv /= 8; + uv /= 1.4; + uv -= float2(-0.022,-0.022); + float tm = _Time; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + float4 t2 = tex2D(_MainTex2, uv); + t2.rgb = t2.bgg; + t2.b += 0.1; + + uv = IN.uv_MainTex; + uv /= 8; + uv += float2(-0.05,0); + tm += 0.2; + uv /= 1.4; + uv -= float2(-0.022,-0.022); + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + float4 tx = tex2D(_MainTex2, uv); + tx.rgb = tx.bgg; + tx.b += 0.1; + t2 += tx; + + uv = IN.uv_MainTex; + uv /= 8; + uv += float2(-0.025,-0.02); + tm += 0.4; + uv /= 1.4; + uv -= float2(-0.022,-0.022); + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + tx = tex2D(_MainTex2, uv); + tx.rgb = tx.bgg; + tx.b += 0.1; + t2 += tx; + + float4 t = tex2D(_MainTex, IN.uv_MainTex + float2(t2.g / 64,t2.g / 64))*IN.color; + + t2.a = t.a; + + t.rgb += t2*_Value2; + + + float4 c = float4(t.rgb,t.a*(1 - _Alpha)); + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ice.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ice.shader.meta new file mode 100644 index 00000000..bf18cf74 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Ice.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5dfd86703c122c549b47fc04f9fb3216 +timeCreated: 1529660433 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_IcedFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_IcedFX.shader new file mode 100644 index 00000000..1b70ab9d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_IcedFX.shader @@ -0,0 +1,141 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/IcedFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + float3 Metal(float _t) + { + float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) + / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); + + float v = (0.317398726 + 2.22806245e-5*_t + 4.20481691e-8*_t*_t) + / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); + + float x = 3.0 * u / (2.0 * u - 8.0 * v + 4.0); + float y = 2.0 * v / (2.0 * u - 8.0 * v + 4.0); + float z = 1.0 - x - y; + + float Y = 1.0; + float X = (Y / y) * x; + float Z = (Y / y) * z; + + float3 RGB = float3(Z,Y,X) / _Distortion; + + RGB.y = RGB.x * pow(0.0006*_t, 2.0); + RGB.x = RGB.y * pow(0.0004*_t, 6.0); + RGB.z = RGB.z * pow(0.0004*_t, 2.0); + + return RGB; + } + + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + float4 rainbow(float t) + { + t = mod(t,1.0); + float tx = t * 6.0; + + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + + return float4(1.0, 1.0, 1.0,r); + } + + float4 plasma(float2 uv) + { + float2 tuv = uv; + uv *= 2.5; + float a = 1.1 + _Time / 2 * 20 * 2.25; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + n += tex2D(_MainTex, tuv).r * 0.2 + tex2D(_MainTex, tuv).g * 0.4 + tex2D(_MainTex, tuv).b * 0.2; + + return rainbow(n); + } + + + void surf(Input IN, inout SurfaceOutput o) + { + + + float2 uv = IN.uv_MainTex; + + float4 noise = tex2D(_MainTex, uv); + float lum = dot(noise.rgb, float3 (0.2126, 0.7152, 0.0722)); + + float maxTemp = 4000.0; + float tempScale = maxTemp; + float3 c = Metal(lum * tempScale); + float alpha = tex2D(_MainTex, IN.uv_MainTex).a; + float4 sortie = plasma(IN.uv_MainTex); + sortie.a = sortie.a*alpha - _Alpha; + c.rgb = c.rgb*sortie.a; + sortie.r = sortie.a; + sortie.g = sortie.a; + sortie.b = sortie.a; + sortie.rgb = c.rgb + (1 - sortie.a); + float4 r = float4(sortie.rgb,noise.a * 1 - _Alpha); + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_IcedFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_IcedFX.shader.meta new file mode 100644 index 00000000..08561e09 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_IcedFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1f9d4efa3dfa5914496ae7b910bd6a86 +timeCreated: 1529660419 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Jelly.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Jelly.shader new file mode 100644 index 00000000..8c45ac6a --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Jelly.shader @@ -0,0 +1,100 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Jelly" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _RandomPos("RandomPos", Range(0,1)) = 0 + _Inside("Inside", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + + sampler2D _MainTex; + float _Distortion; + float _RandomPos; + float _Inside; + float _Alpha; + float _Speed; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float time = _Time*_Speed * 200 + _RandomPos; + + uv.x += (sin(uv.y + time) * 0.019*_Distortion); + uv.y += (cos(uv.x + time) * 0.009*_Distortion); + uv.x = lerp(uv.x,IN.uv_MainTex.x,1 - IN.uv_MainTex.y); + uv.y = lerp(uv.y,IN.uv_MainTex.y,1 - IN.uv_MainTex.y); + + float4 rcol = tex2D(_MainTex, uv)* IN.color; + uv = IN.uv_MainTex; + uv.x += (sin(uv.y + time) * 0.019*_Distortion*_Inside); + uv.y += (cos(uv.x + time) * 0.009*_Distortion*_Inside); + uv.x = lerp(uv.x,IN.uv_MainTex.x,1 - IN.uv_MainTex.y); + uv.y = lerp(uv.y,IN.uv_MainTex.y,1 - IN.uv_MainTex.y); + + float2 scaleCenter = float2(0.5f, 0.5f); + uv = (uv - scaleCenter) * (_Inside)+scaleCenter; + + float4 rcol2 = (tex2D(_MainTex, uv)* IN.color); + rcol.rgb = lerp(rcol.rgb,rcol.rgb / 2,rcol2.a); + rcol2.rgb /= 2 + (1 - _Inside); + rcol.rgb += rcol2.rgb*rcol2.a; + rcol.a = rcol.a * 1 - _Alpha; + + o.Albedo = rcol.rgb * rcol.a; + o.Alpha = rcol.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Jelly.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Jelly.shader.meta new file mode 100644 index 00000000..e73245ac --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Jelly.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dd59a66c54c8b9843ad9f374d4093720 +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Lightning.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Lightning.shader new file mode 100644 index 00000000..2201928b --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Lightning.shader @@ -0,0 +1,114 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Lightning" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + [HideInInspector] _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector] _Color("Tint", Color) = (1,1,1,1) + [HideInInspector] _Value1("_Value1", Range(0,1)) = 0 + [HideInInspector] _Value2("_Value2", Range(0,1)) = 0 + [HideInInspector] _Value3("_Value3", Range(0,1)) = 0 + [HideInInspector] _Value4("_Value4", Range(0,1)) = 0 + [HideInInspector] _Value5("_Value5", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _Value1; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float speed = _Value1; + float2 uv = IN.uv_MainTex; + uv += float2(0,0); + uv /= 8; + float tm = _Time; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + float4 t2 = tex2D(_MainTex2, uv); + + uv = IN.uv_MainTex; + uv /= 8; + tm += 0.2; + uv /= 1.0; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + t2 += tex2D(_MainTex2, uv); + + uv = IN.uv_MainTex; + uv /= 8; + tm += 0.6 + _Time; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + t2 += tex2D(_MainTex2, uv); + + float4 t = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + t2.a = t.a; + + + t.rgb += t2*_Value2; + + + float4 c = float4(t.rgb,t.a*(1 - _Alpha)); + + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Lightning.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Lightning.shader.meta new file mode 100644 index 00000000..4e6b637b --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Lightning.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 99917e3b2f1051840ac3d9746e2c657d +timeCreated: 1529660446 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_LightningBolt.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_LightningBolt.shader new file mode 100644 index 00000000..64219f12 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_LightningBolt.shader @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/LightningBolt" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + [HideInInspector] _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector] _Color("Tint", Color) = (1,1,1,1) + [HideInInspector] _Value1("_Value1", Range(0,1)) = 0 + [HideInInspector] _Value2("_Value2", Range(0,1)) = 0 + [HideInInspector] _Value3("_Value3", Range(0,1)) = 0 + [HideInInspector] _Value4("_Value4", Range(0,1)) = 0 + [HideInInspector] _Value5("_Value5", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _Value1; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float speed = _Value1; + float2 uv = IN.uv_MainTex; + uv += float2(0,0); + uv /= 8; + float tm = _Time; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + float4 t2 = tex2D(_MainTex2, uv); + + uv = IN.uv_MainTex; + uv /= 8; + tm += 0.2; + uv /= 1.0; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + t2 += tex2D(_MainTex2, uv); + + uv = IN.uv_MainTex; + uv /= 8; + tm += 0.6; + uv.x += floor(fmod(tm*speed, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm*speed / 8, 1.0) * 8) / 8); + t2 += tex2D(_MainTex2, uv); + + float4 t = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + t2.a = t.a; + + + t.rgb += t2*_Value2; + + float4 c = float4(t.rgb,t.a*(1 - _Alpha)); + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_LightningBolt.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_LightningBolt.shader.meta new file mode 100644 index 00000000..6530ca95 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_LightningBolt.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 46dfa33ac097f4b4c8556e0b1fec3e4c +timeCreated: 1529660425 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquid.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquid.shader new file mode 100644 index 00000000..c4680217 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquid.shader @@ -0,0 +1,139 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Liquid" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + EValue("EValue", Range(0,1)) = 1.0 + Light("Light", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float _Speed; + float EValue; + float4 _Color; + float Light; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + float col(float2 coord) + { + float time = _Time * 10; + float delta_theta = 0.897597901025655210989326680937; + float col = 0.0; + float theta = 0.0; + + + float _Value = _Speed; + float _Value2 = _Distortion; + float _Value3 = _Distortion; + float _Value4 = _Distortion; + + float2 adjc = coord; + theta = delta_theta * 1; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + theta = delta_theta * 2; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + theta = delta_theta * 3; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + theta = delta_theta * 4; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + theta = delta_theta * 5; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + theta = delta_theta * 6; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + theta = delta_theta * 7; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + theta = delta_theta * 8; + adjc.x += cos(theta)*time*_Value + time * _Value2; + adjc.y -= sin(theta)*time*_Value - time * _Value3; + col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); + return cos(col); + } + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex, c1 = p, c2 = p; + float cc1 = col(c1); + c2.x += 8.53; + float dx = 0.50*(cc1 - col(c2)) / 60; + c2.x = p.x; + c2.y += 8.53; + float dy = 0.50*(cc1 - col(c2)) / 60; + c1.x += dx*2.; + c1.y = (c1.y + dy*2.); + float alpha = 1. + dot(dx,dy) * 700 * Light; + float ddx = dx - 0.012; + float ddy = dy - 0.012; + if (ddx > 0. && ddy > 0.) alpha = pow(alpha, ddx*ddy * 200000); + c1 = lerp(p,c1,EValue); + float4 col = tex2D(_MainTex,c1)*(alpha)* IN.color; + float4 c = float4(col.rgb,col.a*(1 - _Alpha)); + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquid.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquid.shader.meta new file mode 100644 index 00000000..f8ff8c47 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquid.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0dbd04652ed006a4893baba17626de03 +timeCreated: 1529660413 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquify.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquify.shader new file mode 100644 index 00000000..09857213 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquify.shader @@ -0,0 +1,104 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Liquify" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + EValue("EValue", Range(0,1)) = 1.0 + Light("Light", Range(0,1)) = 1.0 + TurnToLiquid("TurnToLiquid", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + sampler2D _MainTex2; + float _Distortion; + float _Alpha; + float _Speed; + float EValue; + float4 _Color; + float Light; + float TurnToLiquid; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float c1 = 1; + float noffset = TurnToLiquid*sin(p.x * 16 * (TurnToLiquid + 1)) / 2; + float _ClipUp = 1 - TurnToLiquid * 2; + c1 = saturate(((1 + noffset) / (1 - _ClipUp + 0.04))*(1 - IN.uv_MainTex.y) - noffset); + float r = 1 - c1 + sin(p.x*_Distortion)*TurnToLiquid / 3 + TurnToLiquid / 2; + + p.y += r; + float2 p2 = IN.uv_MainTex; + p2.y += TurnToLiquid - 0.5; + p2 /= 3; + float4 col2 = tex2D(_MainTex2,p2); + + col2 *= TurnToLiquid * 20; + p += float2(col2.r / 16,col2.g / 16); + p -= TurnToLiquid; + + float4 col = tex2D(_MainTex,p)* IN.color; + + col.rgb += r / 2; + col.rgb += col2.rgb / 8; + + float alpha = 1 - ((0.4 + p.y)*TurnToLiquid * 2); + float4 c = float4(col.rgb,col.a*alpha*(1 - _Alpha)); + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquify.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquify.shader.meta new file mode 100644 index 00000000..c2d38c45 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Liquify.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5022b8c1051a1754abcfc92e94268706 +timeCreated: 1529660428 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_MetalFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_MetalFX.shader new file mode 100644 index 00000000..d585f967 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_MetalFX.shader @@ -0,0 +1,139 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/MetalFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + +#pragma target 3.0 + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + float3 Metal(float _t) + { + + float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) + / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); + + float v = (0.317398726 + 4.22806245e-5*_t + 4.20481691e-8*_t*_t) + / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); + + float x = 3.0 * u / (2.0 * u - 8.0 * v + 4.0); + float y = 2.0 * v / (2.0 * u - 8.0 * v + 4.0); + float z = 1.0 - x - y; + + float Y = 1.0; + float X = (Y / y) * x; + float Z = (Y / y) * z; + + float3 RGB = float3(Z,Y,X) / _Distortion; + + RGB.x = RGB.x * pow(0.0006*_t, 4.0); + RGB.y = RGB.y * pow(0.0004*_t, 4.0); + RGB.z = RGB.z * pow(0.0004*_t, 4.0); + + return RGB; + } + + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + float4 rainbow(float t) + { + t = mod(t,1.0); + float tx = t * 6.0; + + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + + return float4(1.0, 1.0, 1.0,r); + } + + float4 plasma(float2 uv) + { + float2 tuv = uv; + uv *= 2.5; + float a = 1.1 + _Time / 4 * 20 * 2.25; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + n += tex2D(_MainTex, tuv).r * 0.2 + tex2D(_MainTex, tuv).g * 0.4 + tex2D(_MainTex, tuv).b * 0.2; + + return rainbow(n); + } + + + void surf(Input IN, inout SurfaceOutput o) + { + + + float2 uv = IN.uv_MainTex; + float4 noise = tex2D(_MainTex, uv)* IN.color; + float lum = dot(noise.rgb, float3 (0.4126, 0.8152, 0.1722)); + float maxTemp = 4000.0; + float tempScale = maxTemp; + float3 c = Metal(lum * tempScale); + float alpha = tex2D(_MainTex, IN.uv_MainTex).a; + float4 sortie = plasma(IN.uv_MainTex); + sortie.a = sortie.a*alpha - _Alpha; + sortie.rgb = c.rgb + (1 - sortie.a); + sortie.rgb = 0.1 + sortie.rgb / 2 + dot(sortie.rgb, float3 (0.2126, 0.2152, 0.1722)); + float4 r = float4(sortie.rgb,noise.a * 1 - _Alpha); + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_MetalFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_MetalFX.shader.meta new file mode 100644 index 00000000..767b39fc --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_MetalFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8a97c0bb7650e4e489b31e606aac8433 +timeCreated: 1529660442 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.shader new file mode 100644 index 00000000..a37dd67e --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.shader @@ -0,0 +1,92 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Mystic_Distortion" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Pitch("Pitch", Range(0,0.5)) = 0 + _OffsetX("OffsetX", Range(0,128)) = 0 + _OffsetY("OffsetY", Range(0,128)) = 0 + _DistanceX("DistanceX", Range(0,1)) = 0 + _DistanceY("DistanceY", Range(0,1)) = 0 + _WaveTimeX("WaveTimeX", Range(0,360)) = 0 + _WaveTimeY("WaveTimeY", Range(0,360)) = 0 + _Color("Tint", Color) = (1,1,1,1) + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float _OffsetX; + float _OffsetY; + float _Pitch; + float4 _Color; + float _DistanceX; + float _DistanceY; + float _WaveTimeX; + float _WaveTimeY; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + p.x = p.x + sin(p.y*_OffsetX + _WaveTimeX)*_DistanceX; + p.y = p.y + cos(p.x*_OffsetY + _WaveTimeY)*_DistanceY; + float2 m = float2(0.5, 0.5); + float2 d = p - m; + float r = sqrt(dot(d, d)); + float power = 4.44289334 * (_Pitch - 0.5); + float bind = m.y; + float2 uv; + uv = m + normalize(d) * atan(r * -power * 10.0) * bind / atan(-power * bind * 10.0); + float4 mainColor = tex2D(_MainTex, uv)* IN.color; + mainColor.a -= _Alpha; + o.Albedo = mainColor.rgb * mainColor.a; + o.Alpha = mainColor.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.shader.meta new file mode 100644 index 00000000..031013b7 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 52b9171ac8dcc924ba4a96fb19f314e9 +timeCreated: 1529660430 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Negative.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Negative.shader new file mode 100644 index 00000000..2e9459dc --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Negative.shader @@ -0,0 +1,71 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Negative" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 r = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + r.rgb = lerp(r.rgb,1 - r.rgb,_Distortion); + r.a = r.a * 1 - _Alpha; + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Negative.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Negative.shader.meta new file mode 100644 index 00000000..f1e89f5c --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Negative.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5d9563ed05c261542b53a6e7d026a6d8 +timeCreated: 1529660432 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Noise.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Noise.shader new file mode 100644 index 00000000..afbc6d26 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Noise.shader @@ -0,0 +1,80 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Noise" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Color("_Color", Color) = (1,1,1,1) + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + inline float rand(float2 co) + { + return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 tex = tex2D(_MainTex, IN.uv_MainTex); + float4 noise = lerp(tex,rand(IN.uv_MainTex),_Distortion); + + noise.a = tex.a * 1 - _Alpha; + float4 c = noise*IN.color; + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Noise.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Noise.shader.meta new file mode 100644 index 00000000..fe461f8a --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Noise.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 87da50f03aecb8041b0133a5b9c374f0 +timeCreated: 1529660441 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_NoiseAnimated.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_NoiseAnimated.shader new file mode 100644 index 00000000..3f953ccd --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_NoiseAnimated.shader @@ -0,0 +1,77 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/NoiseAnimated" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Color("_Color", Color) = (1,1,1,1) + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + inline float rand(float2 co) { + return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453 *(_Time + 1)); + } + void surf(Input IN, inout SurfaceOutput o) + { + + float4 tex = tex2D(_MainTex, IN.uv_MainTex); + float4 noise = lerp(tex,rand(IN.uv_MainTex),_Distortion); + + noise.a = tex.a * 1 - _Alpha; + float4 r = noise* IN.color; + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_NoiseAnimated.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_NoiseAnimated.shader.meta new file mode 100644 index 00000000..61f47422 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_NoiseAnimated.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7a2192414d53d5443902255829a26c53 +timeCreated: 1529660438 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Normal.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Normal.shader new file mode 100644 index 00000000..588b10a8 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Normal.shader @@ -0,0 +1,68 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Normal" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("Tint", Color) = (1,1,1,1) +[HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 +[HideInInspector]_DstBlend("_DstBlend", Float) = 0 +[HideInInspector]_BlendOp("_BlendOp",Float) = 0 +[HideInInspector]_Z("_Z", Float) = 0 +} + +SubShader +{ +Tags +{ +"IgnoreProjector" = "True" +"RenderType" = "TransparentCutout" +"PreviewType" = "Plane" +"CanUseSpriteAtlas" = "True" +} +Cull Off +Lighting Off +ZWrite [_Z] +BlendOp [_BlendOp] +Blend [_SrcBlend] [_DstBlend] + +CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + +sampler2D _MainTex; +float4 _Color; +float _Alpha; + +struct Input +{ +float2 uv_MainTex; +float4 color; +}; + +void vert(inout appdata_full v, out Input o) +{ +v.vertex = UnityPixelSnap(v.vertex); +UNITY_INITIALIZE_OUTPUT(Input, o); +o.color = v.color * _Color; +} + +void surf(Input IN, inout SurfaceOutput o) +{ + +float2 p=IN.uv_MainTex; +float4 c = tex2D(_MainTex, p)*IN.color; +c.a = c.a - _Alpha; +o.Albedo = c.rgb * c.a; +o.Alpha = c.a; +clip(o.Alpha-0.05); +} +ENDCG +} + +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Normal.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Normal.shader.meta new file mode 100644 index 00000000..6215157a --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Normal.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 50621b8f1b2baaf408f23915ff4e270b +timeCreated: 1529660429 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Offset.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Offset.shader new file mode 100644 index 00000000..a5c120d7 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Offset.shader @@ -0,0 +1,77 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Offset" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_OffsetX ("Offset X", Range(0,1)) = 1 +_OffsetY ("Offset Y", Range(0,1)) = 1 +_ZoomX ("Zoom X", Range(0,1)) = 1 +_ZoomY ("Zoom Y", Range(0,1)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 +[HideInInspector]_DstBlend("_DstBlend", Float) = 0 +[HideInInspector]_BlendOp("_BlendOp",Float) = 0 +[HideInInspector]_Z("_Z", Float) = 0 +} + +SubShader +{ +Tags +{ +"IgnoreProjector" = "True" +"RenderType" = "TransparentCutout" +"PreviewType" = "Plane" +"CanUseSpriteAtlas" = "True" +} +Cull Off +Lighting Off +ZWrite [_Z] +BlendOp [_BlendOp] +Blend [_SrcBlend] [_DstBlend] + +CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + +sampler2D _MainTex; +float4 _Color; +float _Size; +float _OffsetX; +float _OffsetY; +float _ZoomX; +float _ZoomY; +float _Alpha; + +struct Input +{ +float2 uv_MainTex; +float4 color; +}; + +void vert(inout appdata_full v, out Input o) +{ +v.vertex = UnityPixelSnap(v.vertex); +UNITY_INITIALIZE_OUTPUT(Input, o); +o.color = v.color * _Color; +} + +void surf(Input IN, inout SurfaceOutput o) +{ +float2 uv = IN.uv_MainTex+float2(_OffsetX,_OffsetY); +uv = fmod(uv * float2(_ZoomX ,_ZoomY),1); +float4 mainColor = tex2D(_MainTex, uv)*IN.color; +mainColor.a = mainColor.a-_Alpha; +o.Albedo = mainColor.rgb * mainColor.a; +o.Alpha = mainColor.a; +clip(o.Alpha-0.05); +} +ENDCG +} + +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Offset.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Offset.shader.meta new file mode 100644 index 00000000..c60e5fff --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Offset.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a86bb982814de6c4b91610022a55350b +timeCreated: 1529660451 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Outline.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Outline.shader new file mode 100644 index 00000000..82312779 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Outline.shader @@ -0,0 +1,88 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Outline" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _OutLineSpread("Outline Spread", Range(0,0.01)) = 0.007 + _Color("Tint", Color) = (1,1,1,1) + _ColorX("Tint", Color) = (1,1,1,1) + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float _OutLineSpread; + float4 _Color; + float4 _ColorX; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + + + + float4 mainColor = (tex2D(_MainTex, IN.uv_MainTex + float2(-_OutLineSpread,_OutLineSpread)) + + tex2D(_MainTex, IN.uv_MainTex + float2(_OutLineSpread,-_OutLineSpread)) + + tex2D(_MainTex, IN.uv_MainTex + float2(_OutLineSpread,_OutLineSpread)) + + tex2D(_MainTex, IN.uv_MainTex - float2(_OutLineSpread,_OutLineSpread))); + + mainColor.rgb = _ColorX.rgb; + + float4 addcolor = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + + if (mainColor.a > 0.40) { mainColor = _ColorX; } + if (addcolor.a > 0.40) { mainColor = addcolor; mainColor.a = addcolor.a; } + + float4 r = mainColor*IN.color.a; + + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Outline.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Outline.shader.meta new file mode 100644 index 00000000..ebfe6fcd --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Outline.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 66e3d55d357f74748a3f3200f476399a +timeCreated: 1529660435 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pattern.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pattern.shader new file mode 100644 index 00000000..e5a9ac2e --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pattern.shader @@ -0,0 +1,77 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Pattern" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _MainTex2("Pattern (RGB)", 2D) = "white" {} + _Alpha("Alpha", Range(0,1)) = 1.0 + _OffsetX("OffsetX", Range(0,1)) = 0 + _OffsetY("OffsetY", Range(0,1)) = 0 + _Color("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _OffsetX; + float _OffsetY; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 t = tex2D(_MainTex, IN.uv_MainTex); + float4 c = tex2D(_MainTex2, IN.uv_MainTex + float2(_OffsetX,_OffsetY))* IN.color; + c.a = c.a*t.a - _Alpha; + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pattern.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pattern.shader.meta new file mode 100644 index 00000000..af1ebcaa --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pattern.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 066c5aa1ef81fd64aa9c90b8fc463a40 +timeCreated: 1529660410 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel.shader new file mode 100644 index 00000000..74db44b7 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel.shader @@ -0,0 +1,75 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Pixel" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + + + sampler2D _MainTex; + float4 _Color; + sampler2D _AlphaTex; + float _Offset; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + float _Cutoff = 0.5; + float2 p = IN.uv_MainTex; + p = round(p * _Offset) / _Offset; + float4 c = tex2D(_MainTex,p) * IN.color; + float alpha2 = c.a; + if (alpha2<0.95) alpha2 = 0; + o.Albedo = c.rgb * c.a; + o.Alpha = c.a *alpha2; + clip(o.Alpha - _Cutoff); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel.shader.meta new file mode 100644 index 00000000..62039c4c --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: abfa234603f21d4488ccad45af7f691b +timeCreated: 1529660453 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.shader new file mode 100644 index 00000000..590ab246 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.shader @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Pixel8bitsBW" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Size("Size", Range(0,1)) = 0 + _Offset("Offset", Range(0,1)) = 0 + _Offset2("Offset2", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float4 _Color; + float _Size; + float _Offset; + float _Offset2; + float _Alpha; + + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + float compare(float3 a, float3 b) + { + a = a*a*a; + b = b*b*b; + float3 diff = (a - b); + return dot(diff, diff); + } + + inline float mod(float x, float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + void surf(Input IN, inout SurfaceOutput o) + { + + + + float2 q = IN.uv_MainTex; + float2 pixelSize = 64 * _Size; + float2 c = floor(q * pixelSize) / pixelSize; + float4 src4 = tex2D(_MainTex, c)* IN.color; + float3 src = src4.rgb*_Offset2; + float alpha = src4.a; + if (alpha<0.95) alpha = 0; + + float3 dst0 = float3(0,0,0); + float3 dst1 = float3(0,0,0); + float best0 = 1e3; + float best1 = 1e3; +#define TCOLOR(R, G, B) { const float3 tst = float3(R, G, B); float err = compare(src, tst); if (err < best0) { best1 = best0; dst1 = dst0; best0 = err; dst0 = tst; } } + TCOLOR(0.98, 0.98, 0.98); + TCOLOR(0.03, 0.03, 0.03); +#undef TCOLOR + + best0 = sqrt(best0); best1 = sqrt(best1); + float4 r = float4(mod(c.x + c.y, 2.0) >(1 + best1 / (best0 + best1)) ? dst1 : dst0, 1.0); + r.a = r.a*alpha*(1 - _Alpha); + + + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.shader.meta new file mode 100644 index 00000000..e4b4318a --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c69c174fd39cdf340ba0e03c75dce2df +timeCreated: 1529660458 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.shader new file mode 100644 index 00000000..2e65545b --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.shader @@ -0,0 +1,125 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Pixel8bitsC64" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Size("Size", Range(0,1)) = 0 + _Offset("Offset", Range(0,1)) = 0 + _Offset2("Offset2", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float4 _Color; + float _Size; + float _Offset; + float _Offset2; + float _Alpha; + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + float compare(float3 a, float3 b) + { + a = a*a*a; + b = b*b*b; + float3 diff = (a - b); + return dot(diff, diff); + } + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + void surf(Input IN, inout SurfaceOutput o) + { + + float2 q = IN.uv_MainTex; + float2 pixelSize = 64 * _Size; + pixelSize.x /= 3 * _Offset; + float2 c = floor(q * pixelSize) / pixelSize; + + float4 src4 = tex2D(_MainTex, c)* IN.color; + float3 src = src4.rgb*_Offset2; + float alpha = src4.a; + if (alpha<0.95) alpha = 0; + + src *= _Offset2; + + float3 dst0 = float3(0,0,0); + float3 dst1 = float3(0,0,0); + float best0 = 1e3; + float best1 = 1e3; + +#define TCOLOR(R, G, B) { const float3 tst = float3(R, G, B); float err = compare(src, tst); if (err < best0) { best1 = best0; dst1 = dst0; best0 = err; dst0 = tst; } } + TCOLOR(0.,0.,0.); + TCOLOR(1.,1.,1.); + TCOLOR(0.62890625,0.30078125,0.26171875); + TCOLOR(0.4140625,0.75390625,0.78125); + TCOLOR(0.6328125,0.33984375,0.64453125); + TCOLOR(0.359375,0.67578125,0.37109375); + TCOLOR(0.30859375,0.265625,0.609375); + TCOLOR(0.79296875,0.8359375,0.53515625); + TCOLOR(0.63671875,0.40625,0.2265625); + TCOLOR(0.4296875,0.32421875,0.04296875); + TCOLOR(0.796875,0.49609375,0.4609375); + TCOLOR(0.38671875,0.38671875,0.38671875); + TCOLOR(0.54296875,0.54296875,0.54296875); + TCOLOR(0.60546875,0.88671875,0.61328125); + TCOLOR(0.5390625,0.49609375,0.80078125); + TCOLOR(0.68359375,0.68359375,0.68359375); +#undef TCOLOR + + best0 = sqrt(best0); best1 = sqrt(best1); + float4 r = float4(mod(c.x + c.y, 2.0) > (1 + best1 / (best0 + best1)) ? dst1 : dst0, 1.0); + r.a = r.a*alpha*(1 - _Alpha); + + + o.Albedo =r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.shader.meta new file mode 100644 index 00000000..69e0ca92 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a9274a97032f5794093158c4af04c305 +timeCreated: 1529660452 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.shader new file mode 100644 index 00000000..b4e90f66 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.shader @@ -0,0 +1,109 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Pixel8bitsGB" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Size("Size", Range(0,1)) = 0 + _Offset("Offset", Range(0,1)) = 0 + _Offset2("Offset2", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float4 _Color; + float _Size; + float _Offset; + float _Offset2; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + float compare(float3 a, float3 b) + { + a = a*a*a; + b = b*b*b; + float3 diff = (a - b); + return dot(diff, diff); + } + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 q = IN.uv_MainTex; + float2 pixelSize = 64 * _Size; + float2 c = floor(q * pixelSize) / pixelSize; + float4 src4 = tex2D(_MainTex, c)* IN.color; + float3 src = src4.rgb*_Offset2; + float alpha = src4.a; + if (alpha<0.95) alpha = 0; + + float3 dst0 = float3(0,0,0); + float3 dst1 = float3(0,0,0); + float best0 = 1e3; + float best1 = 1e3; + +#define TCOLOR(R, G, B) { const float3 tst = float3(R, G, B); float err = compare(src, tst); if (err < best0) { best1 = best0; dst1 = dst0; best0 = err; dst0 = tst; } } + TCOLOR(0.68, 0.79, 0.27); + TCOLOR(0.47, 0.69, 0.42); + TCOLOR(0.13, 0.43, 0.37); + TCOLOR(0.03, 0.16, 0.33); +#undef TCOLOR + + best0 = sqrt(best0); best1 = sqrt(best1); + float4 r = float4(mod(c.x + c.y, 2.0) >(1 + best1 / (best0 + best1)) ? dst1 : dst0, 1.0); + r.a = r.a*alpha*(1 - _Alpha); + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.shader.meta new file mode 100644 index 00000000..6c3002af --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a61a8ffa96f969f43b4992778d99f522 +timeCreated: 1529660450 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PixelDie.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PixelDie.shader new file mode 100644 index 00000000..08e2f80b --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PixelDie.shader @@ -0,0 +1,91 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/PixelDie" +{ +Properties +{ +[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("Tint", Color) = (1,1,1,1) +[HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 +[HideInInspector]_DstBlend("_DstBlend", Float) = 0 +[HideInInspector]_BlendOp("_BlendOp",Float) = 0 +[HideInInspector]_Z("_Z", Float) = 0 +} + +SubShader +{ +Tags +{ +"IgnoreProjector" = "True" +"RenderType" = "TransparentCutout" +"PreviewType" = "Plane" +"CanUseSpriteAtlas" = "True" +} +Cull Off +Lighting Off +ZWrite [_Z] +BlendOp [_BlendOp] +Blend [_SrcBlend] [_DstBlend] + +CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +struct Input +{ +float2 uv_MainTex; +float4 color; +}; + +void vert(inout appdata_full v, out Input o) +{ +v.vertex = UnityPixelSnap(v.vertex); +UNITY_INITIALIZE_OUTPUT(Input, o); +o.color = v.color * _Color; +} + +void surf(Input IN, inout SurfaceOutput o) +{ + + +float2 uv=IN.uv_MainTex; +float4 t2 = tex2D(_MainTex2, float2(uv.x,uv.y)); +t2.rgb= smoothstep(t2.rgb, t2.rgb+0.5, _Value1*1.2); +float r= 1-t2.r; +float4 t = tex2D(_MainTex, float2(uv.x*r,uv.y*r))*IN.color; +t.a*=r; +t.b+=t2.g; +t.b+=_Value1*4; +t.rg+=(1-r)*2; +float4 v= float4(t.rgb,t.a*(1-_Alpha)); + +o.Albedo = v.rgb * v.a; +o.Alpha = v.a; +clip(o.Alpha-0.05); +} +ENDCG +} + +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PixelDie.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PixelDie.shader.meta new file mode 100644 index 00000000..3071486b --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PixelDie.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 57182b104dbf0294fb2ee17e817afce8 +timeCreated: 1529660430 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.shader new file mode 100644 index 00000000..dbf57245 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.shader @@ -0,0 +1,108 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/PlasmaRainbow" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Colors("Colors", Range(4,128)) = 4 + _Color("Color", Color) = (1,1,1,1) + _Offset("Offset", Range(4,128)) = 1 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + + sampler2D _MainTex; + float _Offset; + float _Alpha; + float _Colors; + float _TimeX; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color ; + } + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + float3 rainbow(float t) { + t = mod(t,1.0); + float tx = t * _Colors; + + float r = clamp(tx - 4.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + float g = tx < 2.0 ? clamp(tx, 0.0, 1.0) : clamp(4.0 - tx, 0.0, 1.0); + float b = tx < 4.0 ? clamp(tx - 2.0, 0.0, 1.0) : clamp(6.0 - tx, 0.0, 1.0); + return float3(r, g, b); + } + + float3 plasma(float2 uv) + { + +_TimeX=_Time.y; + float a = 1.1 + _TimeX * 2.25 + _Offset; + float b = 0.5 + _TimeX * 1.77 + _Offset; + float c = 8.4 + _TimeX * 1.58 + _Offset; + float d = 610 + _TimeX * 2.03 + _Offset; + float x1 = 2.0*uv.x; + float n = sin(a + x1) + sin(b - x1) + sin(c + 2.0 * uv.y) + sin(d + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + float4 nx = tex2D(_MainTex,uv); + n += nx.r * 0.2 + nx.g * 0.4 + nx.b * 0.2; + + return rainbow(n); + } + + + void surf(Input IN, inout SurfaceOutput o) + { + + float alpha = tex2D(_MainTex, IN.uv_MainTex).a; + float4 c = float4(plasma(IN.uv_MainTex), alpha - _Alpha)*IN.color; + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.shader.meta new file mode 100644 index 00000000..37c9b6ce --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9ec0d369db2b532418791e8f7298d08c +timeCreated: 1529660447 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaShield.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaShield.shader new file mode 100644 index 00000000..1d655cef --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaShield.shader @@ -0,0 +1,109 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/PlasmaShield" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Size("Size", Range(4,128)) = 4 + _Color("Tint", Color) = (1,1,1,1) + _ColorX("Tint", Color) = (1,1,1,1) + _Offset("Offset", Range(4,128)) = 4 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float _Offset; + float _Alpha; + float4 _Color; + float4 _ColorX; + float _Size; + float _TimeX; + + + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + float4 rainbow(float t) + { + t = mod(t,1.0); + float tx = t * _Size; + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + return float4(_ColorX.r, _ColorX.g, _ColorX.b,1 - r + (1. - _ColorX.a)); + } + + float4 plasma(float2 uv) + { + _TimeX=_Time.y; + float a = 1.1 + _TimeX * 2.25 + _Offset; + float x1 = 2.0*uv.x; + float n = sin(a + x1) + sin(a - x1) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + float3 nx = tex2D(_MainTex, uv); + n += nx.r * 0.2 + nx.g * 0.4 + nx.b * 0.2; + return rainbow(n); + } + + + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float4 c = tex2D(_MainTex,p) * IN.color; + c.a = c.a*(1 - _Alpha); + float alpha = tex2D(_MainTex, IN.uv_MainTex).a; + float4 sortie = plasma(IN.uv_MainTex); + sortie.a = sortie.a*alpha - _Alpha; + float4 col = sortie*IN.color; + o.Albedo = col.rgb * col.a; + o.Alpha = col.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaShield.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaShield.shader.meta new file mode 100644 index 00000000..3a1e8ff8 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_PlasmaShield.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 126a2a4b9245e9e4ea6f2bcb77147a9b +timeCreated: 1529660414 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Posterize.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Posterize.shader new file mode 100644 index 00000000..4f4eec61 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Posterize.shader @@ -0,0 +1,75 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Posterize" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float4 c = tex2D(_MainTex,p) * IN.color; + c.a = c.a*(1 - _Alpha); + + float4 col = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + float div = 256.0 / float(_Distortion); + col = floor(col * div) / div; + col.a = col.a * 1 - _Alpha; + + o.Albedo = col.rgb * col.a; + o.Alpha = col.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Posterize.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Posterize.shader.meta new file mode 100644 index 00000000..0e79241a --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Posterize.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 38d99f47e5fd9ae4c8f9c5fffe2040af +timeCreated: 1529660422 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SandFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SandFX.shader new file mode 100644 index 00000000..2e2ae331 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SandFX.shader @@ -0,0 +1,85 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/SandFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + inline float rand(float2 co) { + return frac(sin(dot(co.xy,float2(12.9898,78.233))) * 43758.5453); + } + void surf(Input IN, inout SurfaceOutput o) + { + + float4 Alpha = tex2D(_MainTex, IN.uv_MainTex + float2(sin(IN.uv_MainTex.y*125.82*_Distortion / 3) / 140,sin(IN.uv_MainTex.y*31.4*_Distortion / 3) / 40))*IN.color; + float4 res; + float lum = dot(Alpha.rgb, float3(.222, .707, .071)); + float noise = lerp(lum,rand(IN.uv_MainTex.xy),_Distortion / 3); + if (noise>0.6) noise = 0.6; + if (noise<0.3) noise = 0.3; + res.rgb = noise; + res.r += 0.5; + res.g += 0.3; + res.b -= 0.3; + res.rgb = lerp(Alpha.rgb,res.rgb,_Distortion); + float4 c = float4(res.rgb, Alpha.a*(1.0 - _Alpha)); + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SandFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SandFX.shader.meta new file mode 100644 index 00000000..49362b75 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SandFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0bd9f2a1e0b10b34996c7c982f291a27 +timeCreated: 1529660412 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sepia.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sepia.shader new file mode 100644 index 00000000..6279711c --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sepia.shader @@ -0,0 +1,83 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Sepia" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Color("_Color", Color) = (1,1,1,1) + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + + float4 col = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + float4 mem = col; + float3 r = dot(col.rgb, float3(.222, .707, .071)); + r.r += 0.437; + r.g += 0.171; + r.b += 0.078; + + col.a = col.a * 1 - _Alpha; + r = lerp(mem,r,_Distortion); + float4 c = float4(r, col.a); + + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sepia.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sepia.shader.meta new file mode 100644 index 00000000..a70d13ae --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sepia.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a4cfd93fadd543d4891a5e9e53129fc6 +timeCreated: 1529660449 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sharpen.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sharpen.shader new file mode 100644 index 00000000..a25ca2d5 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sharpen.shader @@ -0,0 +1,89 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Sharpen" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Color("_Color", Color) = (1,1,1,1) + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float4 _Color; + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + inline float4 sharp(float2 uv) + { + float r = 1.0 / 256.0; + float strength = 9.0 * _Distortion; + + float4 c0 = tex2D(_MainTex,uv); + float4 c1 = tex2D(_MainTex,uv - float2(r,.0)); + float4 c2 = tex2D(_MainTex,uv + float2(r,.0)); + float4 c3 = tex2D(_MainTex,uv - float2(.0,r)); + float4 c4 = tex2D(_MainTex,uv + float2(.0,r)); + float4 c5 = c0 + c1 + c2 + c3 + c4; c5 *= 0.2; + float4 mi = min(c0,c1); mi = min(mi,c2); mi = min(mi,c3); mi = min(mi,c4); + float4 ma = max(c0,c1); ma = max(ma,c2); ma = max(ma,c3); ma = max(ma,c4); + float4 rt = clamp(mi,(strength + 1.0)*c0 - c5*strength,ma); + return float4(rt.rgb,c0.a); + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 col = sharp(IN.uv_MainTex)*IN.color; + col.a = col.a * 1 - _Alpha; + o.Albedo = col.rgb * col.a; + o.Alpha = col.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sharpen.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sharpen.shader.meta new file mode 100644 index 00000000..76f2393c --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Sharpen.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 98b168add5812db4ebce469ae0675160 +timeCreated: 1529660445 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.shader new file mode 100644 index 00000000..6241d7bd --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.shader @@ -0,0 +1,97 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Shiny_Reflect" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _MainTex2("Base (RGB)", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Value2("Value 2", Range(0,1)) = 0 + _Value3("Value 3", Range(0,1)) = 0 + _Value4("Value 4", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + sampler2D _MainTex2; + float _Distortion; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + float _Alpha; + float4 _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + + + + float4 tex = tex2D(_MainTex, IN.uv_MainTex)*IN.color; + float4 tex2 = tex2D(_MainTex2, IN.uv_MainTex)*IN.color; + float3 lum = float3(0.299, 0.587, 0.114); + float x = dot(tex.rgb, lum).r; + float t = tex2.r + x*_Value5; + + t = smoothstep(t,t + _Value2, _Distortion + _Value2*0.5); + t -= 1 - t; + t = 1 - abs(t); + t = abs(t); + t *= _Value3; + tex.rgb += float3(t,t,t); + tex.a = tex.a*(1.0 - _Alpha); + tex2 = float4(1,1,1,t*tex.a); + tex = lerp(tex,tex2,_Value4); + + o.Albedo = tex.rgb * tex.a; + o.Alpha = tex.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Transparent/VertexLit" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.shader.meta new file mode 100644 index 00000000..1cf3f0de --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 132649563e68bc643b67b6a4dbd6e902 +timeCreated: 1529660415 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SkyCloud.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SkyCloud.shader new file mode 100644 index 00000000..e3896e8e --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SkyCloud.shader @@ -0,0 +1,85 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/SkyCloud" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _MainTex2("Pattern (RGB)", 2D) = "white" {} + _Alpha("Alpha", Range(0,1)) = 1.0 + _OffsetX("OffsetX", Range(0,1)) = 0 + _OffsetY("OffsetY", Range(0,1)) = 0 + _Zoom("Zoom", Range(0,1)) = 0 + _Intensity("Intensity", Range(0,1)) = 0 + _Color("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float _Alpha; + float _OffsetX; + float _OffsetY; + float _Zoom; + float _Intensity; + + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float4 t = tex2D(_MainTex, p); + p *= _Zoom; + float4 c = tex2D(_MainTex2, p + float2(_OffsetX,_OffsetY))*IN.color; + c.rgb = t.rgb - (c.rgb*_Intensity); + c.a = c.a * t.a - _Alpha; + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SkyCloud.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SkyCloud.shader.meta new file mode 100644 index 00000000..1136089d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_SkyCloud.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 19ee865377cb8fe459e28dfb0057a681 +timeCreated: 1529660417 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Slim.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Slim.shader new file mode 100644 index 00000000..9186c1d7 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Slim.shader @@ -0,0 +1,109 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Slim" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + _Color("_Color", Color) = (1,1,1,1) + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Speed("Speed", Range(0,1)) = 1.0 + EValue("EValue", Range(0,1)) = 1.0 + Light("Light", Range(0,1)) = 1.0 + TurnToLiquid("TurnToLiquid", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + + sampler2D _MainTex; + sampler2D _MainTex2; + float _Distortion; + float _Alpha; + float _Speed; + float EValue; + float4 _Color; + float Light; + float TurnToLiquid; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 p = IN.uv_MainTex; + float c1 = 1; + float noffset = TurnToLiquid*sin(p.x * 16 * (TurnToLiquid + 1)) / 2; + float _ClipUp = 1 - TurnToLiquid * 2; + float Mix = TurnToLiquid + _Distortion; + c1 = saturate(((1 + noffset) / (1 - _ClipUp + 0.04))*(1 - IN.uv_MainTex.y) - noffset); + float r = 1 - c1; + float2 p2 = IN.uv_MainTex.xy; + p2.y += TurnToLiquid - 0.2; + p2 /= 2 / (1 + Mix / 8); + + + float4 col2 = tex2D(_MainTex2,p2); + col2 *= Mix * 20; + //p+=float2(col2.r/32,col2.g/32); + float t = 1 + (_Time * 100); + + float2 mx = col2.r / 32; + p += float2(mx.x,mx.y); + p.x -= Mix / 4; + p.x += noffset / 4; + p.y -= _Distortion / 2.3; + float4 col = tex2D(_MainTex,p)*IN.color; + col.rgb += r / 2; + col.g += col2.g / 8; + col.rb -= col2.rb / 8; + float alpha = 1 - ((0.4 + p.y)*TurnToLiquid * 2); + float4 c = float4(col.rgb,col.a*alpha*(1 - _Alpha)); + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Slim.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Slim.shader.meta new file mode 100644 index 00000000..d50e031d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Slim.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a0099caa3f878534c9aef72fa4ab29d6 +timeCreated: 1529660448 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Smoke.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Smoke.shader new file mode 100644 index 00000000..a0bdddf1 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Smoke.shader @@ -0,0 +1,110 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Smoke" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + [HideInInspector] _MainTex2("Pattern (RGB)", 2D) = "white" {} + [HideInInspector] _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector] _Color("Tint", Color) = (1,1,1,1) + [HideInInspector] _Color1("Tint", Color) = (1,1,1,1) + [HideInInspector] _Color2("Tint", Color) = (1,1,1,1) + [HideInInspector] _Value1("_Value1", Range(0,1)) = 0 + [HideInInspector] _Value2("_Value2", Range(0,1)) = 0 + [HideInInspector] _Value3("_Value3", Range(0,1)) = 0 + [HideInInspector] _Value4("_Value4", Range(0,1)) = 0 + [HideInInspector] _Value5("_Value5", Range(0,1)) = 0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + sampler2D _MainTex2; + float4 _Color; + float4 _Color1; + float4 _Color2; + float _Alpha; + float _Value1; + float _Value2; + float _Value3; + float _Value4; + float _Value5; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + uv += float2(-0.1,-0.1); + uv /= 8; + float tm = (_Value2 + 0.125) * 8; + uv.x += floor(fmod(tm, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm / 8, 1.0) * 8) / 8); + float4 t2 = tex2D(_MainTex2, uv) * _Color1; + uv = IN.uv_MainTex; + uv /= 8; + uv /= 1.8; + uv -= float2(-0.022,-0.022); + uv.x += floor(fmod(tm, 1.0) * 8) / 8; + uv.y += (1 - floor(fmod(tm / 8, 1.0) * 8) / 8); + t2 += tex2D(_MainTex2, uv)* _Color2; + float tr = dot(t2.rgb,1); + + float x = tr / 32; + x = lerp(0,x,_Value2); + float4 t = tex2D(_MainTex, IN.uv_MainTex + float2(x,-x))*IN.color; + t.rgb = lerp(t.rgb,t2.rgb,_Value2); + + float ta = tr*t.a - 0.1; + t.a = lerp(t.a,ta*(1 - _Value2),_Value2); + + float4 c = float4(t.rgb,t.a*(1 - _Alpha)); + + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Smoke.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Smoke.shader.meta new file mode 100644 index 00000000..89260e71 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Smoke.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 409e8a21079d79b49a96fa92669d2fca +timeCreated: 1529660424 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_StoneFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_StoneFX.shader new file mode 100644 index 00000000..9de2949d --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_StoneFX.shader @@ -0,0 +1,113 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/StoneFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Deep("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float _Deep; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color; + } + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + float4 rainbow(float t) + { + t = mod(t,1.0); + float tx = t * 6.0; + + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + + return float4(1.0, 1.0, 1.0,r); + } + + float4 plasma(float2 uv) + { + float2 tuv = uv; + uv *= 15.0; + float a = 1.1 + 20 * 2.25; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + n += tex2D(_MainTex, tuv).r * 11.2 + tex2D(_MainTex, tuv).g * 8.4 + tex2D(_MainTex, tuv).b * 4.2; + + return rainbow(n*_Deep); + } + + + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 tex = tex2D(_MainTex, IN.uv_MainTex + float2(sin(_Distortion * 64) / 512,0)); + float lum = (tex.r + tex.b + tex.g) / 3; + float a = lum; + float rate = 0.2; + float r = a*(1 - rate); + r = r + (1 * (rate / 2)); + if (r>0.6) r = 0.6; + if (r<0.2) r = 0.2; + float4 sortie = plasma(IN.uv_MainTex); + sortie += plasma(float2(IN.uv_MainTex.y,IN.uv_MainTex.x)); + float3 r2 = r - (1 - sortie.a) / 8; + tex.rgb = lerp(tex.rgb,r2,_Distortion); + float4 c = float4(tex.rgb,tex.a * 1 - _Alpha); + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_StoneFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_StoneFX.shader.meta new file mode 100644 index 00000000..48f2c99a --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_StoneFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3017925747353954ea6764987a3f482e +timeCreated: 1529660421 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Threshold.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Threshold.shader new file mode 100644 index 00000000..91c3b0f8 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Threshold.shader @@ -0,0 +1,77 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Threshold" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Color("Tint", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows + + + sampler2D _MainTex; + float _Distortion; + float _Alpha; + float _Color; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + void surf(Input IN, inout SurfaceOutput o) + { + + float4 tx = tex2D(_MainTex, IN.uv_MainTex); + float l = (tx.x + tx.y + tx.z) / 3.0; + tx.rgb = smoothstep(_Distortion, _Distortion + 0.0001, l); + + tx.a = tx.a * 1 - _Alpha; + + float4 r = tx*IN.color; + + o.Albedo = r.rgb * r.a; + o.Alpha = r.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Threshold.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Threshold.shader.meta new file mode 100644 index 00000000..4e934d48 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Threshold.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 93e8f763bc7191649a59f7c8b9c19f19 +timeCreated: 1529660444 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Twist.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Twist.shader new file mode 100644 index 00000000..18c48163 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Twist.shader @@ -0,0 +1,100 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/Twist" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _PosX("PosX", Range(0,1)) = 0 + _PosY("PosY", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + _Color("Color", Color) = (1,1,1,1) + _ColorX("ColorX", Color) = (1,1,1,1) + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + sampler2D _MainTex; + float _Distortion; + float _PosX; + float _PosY; + float4 _Color; + float4 _ColorX; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color * _Color; + } + + + + float4 twist(sampler2D tex, float2 uv, float time) + { + float radius = 0.5; + float2 center = float2(_PosX,_PosY); + float2 tc = uv - center; + float dist = length(tc); + if (dist < radius) + { + float percent = (radius - dist) / radius; + float theta = percent * percent * (2.0 * sin(time)) * 8.0; + float s = sin(theta); + float c = cos(theta); + tc = float2(dot(tc, float2(c, -s)), dot(tc, float2(s, c))); + } + tc += center; + float4 color = tex2D(tex, tc); + return color; + } + + + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 finalColor = twist(_MainTex, uv, _Distortion)* IN.color; + finalColor.a *= (1 - _Alpha); + o.Albedo = finalColor.rgb * finalColor.a; + o.Alpha = finalColor.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Twist.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Twist.shader.meta new file mode 100644 index 00000000..3176d9e5 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_Twist.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b63cf965b4402c142a8fc2c7ef57270e +timeCreated: 1529660456 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_WoodFX.shader b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_WoodFX.shader new file mode 100644 index 00000000..8ca41118 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_WoodFX.shader @@ -0,0 +1,117 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2016 // +/// http://unity3D.vetasoft.com/ // +////////////////////////////////////////////// + +Shader "2DxFX/AL/WoodFX" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Distortion("Distortion", Range(0,1)) = 0 + _Alpha("Alpha", Range(0,1)) = 1.0 + [HideInInspector]_SrcBlend("_SrcBlend", Float) = 0 + [HideInInspector]_DstBlend("_DstBlend", Float) = 0 + [HideInInspector]_BlendOp("_BlendOp",Float) = 0 + [HideInInspector]_Z("_Z", Float) = 0 + } + + SubShader + { + Tags + { + "IgnoreProjector" = "True" + "RenderType" = "TransparentCutout" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + Cull Off + Lighting Off + ZWrite[_Z] + BlendOp[_BlendOp] + Blend[_SrcBlend][_DstBlend] + + CGPROGRAM +#pragma surface surf Lambert vertex:vert nofog keepalpha addshadow fullforwardshadows +#pragma target 3.0 + + sampler2D _MainTex; + float _Distortion; + float _Deep; + float _Alpha; + + struct Input + { + float2 uv_MainTex; + float4 color; + }; + + void vert(inout appdata_full v, out Input o) + { + v.vertex = UnityPixelSnap(v.vertex); + UNITY_INITIALIZE_OUTPUT(Input, o); + o.color = v.color ; + } + + + inline float mod(float x,float modu) + { + return x - floor(x * (1.0 / modu)) * modu; + } + + float4 rainbow(float t) + { + t = mod(t,1.0); + float tx = t * 6.0; + + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + + return float4(1.0, 1.0, 1.0,r); + } + + float4 Wood(float2 uv) + { + float2 tuv = uv; + uv *= 10.0; + float a = 46.1f; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0)*_Deep; + n += tex2D(_MainTex, tuv).r * 11.2 + tex2D(_MainTex, tuv).g * 8.4 + tex2D(_MainTex, tuv).b * 4.2; + return rainbow(n*_Deep); + } + + + void surf(Input IN, inout SurfaceOutput o) + { + + float2 uv = IN.uv_MainTex; + float4 tex = tex2D(_MainTex, IN.uv_MainTex + float2(sin(_Distortion * 64) / 512,0))* IN.color; + float lum = dot(tex.rgb, float3(.22, .17, .571)); + float rate = 0.3; + float r = lum*0.7; + r += 0.15; + if (r>0.6) r = 0.6; + if (r<0.3) r = 0.3; + + float4 sortie = Wood(IN.uv_MainTex); + sortie -= Wood(IN.uv_MainTex + float2(-0.05,0.02)) / 2.0; + float3 r2 = r - (1 - sortie.a) / 8; + float3 tex2; + r2.r -= 0.1; + r2.g -= 0.35; + r2.b -= 0.5; + r2 += 0.35; + tex.rgb = lerp(tex.rgb,r2,_Distortion); + float4 c = float4(tex.rgb,tex.a * 1 - _Alpha); + + + o.Albedo = c.rgb * c.a; + o.Alpha = c.a; + + clip(o.Alpha - 0.05); + } + ENDCG + } + + Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_WoodFX.shader.meta b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_WoodFX.shader.meta new file mode 100644 index 00000000..0f9c5be4 --- /dev/null +++ b/Assets/2DxFX/Resources/2dxfx_AL/_2dxFX_AL_WoodFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 102a56873aa6a4f4797dcc709d25a9b8 +timeCreated: 1529660413 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_4Gradients.shader b/Assets/2DxFX/Resources/_2dxFX_4Gradients.shader new file mode 100644 index 00000000..2817c022 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_4Gradients.shader @@ -0,0 +1,102 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/4Gradients" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Color1 ("_Color1", Color) = (1,1,1,1) +_Color2 ("_Color2", Color) = (1,1,1,1) +_Color3 ("_Color3", Color) = (1,1,1,1) +_Color4 ("_Color4", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float4 _Color1; +float4 _Color2; +float4 _Color3; +float4 _Color4; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float4 c = tex2D(_MainTex,i.texcoord)*i.color; +float alpha = c.a; +float2 uv=i.texcoord.xy; +float4 colorA = lerp(_Color3,_Color4,uv.x*1.3); +float4 colorB = lerp(_Color1,_Color2,uv.x*1.3); +float4 colorC = lerp(colorA,colorB,uv.y*1.3); +c = lerp(c,colorC,colorC.a); +c.a= (alpha)-_Alpha; +return c; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_4Gradients.shader.meta b/Assets/2DxFX/Resources/_2dxFX_4Gradients.shader.meta new file mode 100644 index 00000000..78f796c9 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_4Gradients.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f8385957cb1001f4196051a3c3ba3977 +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Additive.shader b/Assets/2DxFX/Resources/_2dxFX_Additive.shader new file mode 100644 index 00000000..94eadff5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Additive.shader @@ -0,0 +1,89 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Additive" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float _Alpha; + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float4 Sprite = tex2D(_MainTex, i.texcoord)*i.color; +Sprite.a = Sprite.a-_Alpha; +return Sprite; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Additive.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Additive.shader.meta new file mode 100644 index 00000000..fb89eeed --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Additive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 220b66fa085c1d249a354d7c309f6abf +timeCreated: 1529660419 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_BlackHole.shader b/Assets/2DxFX/Resources/_2dxFX_BlackHole.shader new file mode 100644 index 00000000..3cc6b275 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BlackHole.shader @@ -0,0 +1,139 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/BlackHole" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Size ("Size", Range(0,1)) = 0 +_Distortion ("Distortion", Range(0,1)) = 0 +_Hole ("Hole", Range(0,1)) = 0 +_Speed ("Speed", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("ColorX", Color) = (1,1,1,1) + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float4 _ColorX; +float _Size; +float _Distortion; +float _Hole; +float _Speed; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + + + +return OUT; +} + + + +float4 hole(sampler2D tex, float2 uv, float time) +{ + float radius = 0.5; + float2 center = float2(0.5,0.5); + float2 tc = uv - center; + float dist = length(tc); + if (dist < radius) + { + float percent = (radius - dist) / radius; + float theta = percent * percent * (2.0 * sin(time)) * 8.0; + float s = sin(theta); + float c = cos(theta); + tc = float2(dot(tc, float2(c, -s)), dot(tc, float2(s, c))); + } + tc += center; + float4 color = tex2D(tex, tc); + return color; +} + + +float4 frag (v2f i) : COLOR +{ +_Speed*=5.0f; +float2 uv = (i.texcoord-float2(0.5,0.5))*1.246; +float sinX = sin ( _Speed * _Time ); +float cosX = cos ( _Speed * _Time ); +float sinY = sinX; +float2x2 rotationMatrix = float2x2( cosX, -sinX, sinY, cosX); +uv.xy = mul ( uv, rotationMatrix )+float2(0.5,0.5); +float dist = 1.0 - smoothstep( _Hole,_Hole+0.15, length(float2(0.5,0.5)-uv) ); +float dista = 1.0 - smoothstep( 0.25,0.5, length(float2(0.5,0.5)-uv) ); +float4 finalColor = hole(_MainTex, uv, _Distortion); +finalColor.rgb*=1-dist; +finalColor.a=finalColor.a*(1-_Alpha); +finalColor.a*=dista*(1-dist); +return finalColor*i.color*_ColorX; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_BlackHole.shader.meta b/Assets/2DxFX/Resources/_2dxFX_BlackHole.shader.meta new file mode 100644 index 00000000..37b4a8e9 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BlackHole.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: df6ed0d676613f74b873ec673f5ab9b2 +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Blood.shader b/Assets/2DxFX/Resources/_2dxFX_Blood.shader new file mode 100644 index 00000000..809c8a2a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Blood.shader @@ -0,0 +1,124 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Blood" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +EValue ("EValue", Range (0,1)) = 1.0 +Light ("Light", Range (0,1)) = 1.0 +TurnToLiquid ("TurnToLiquid", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +sampler2D _MainTex2; +float _Distortion; +float _Alpha; +float _Speed; +float EValue; +float4 _Color; +float Light; +float TurnToLiquid; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float2 p = i.texcoord.xy; +float c1=1; +float noffset=TurnToLiquid*sin(p.x*16*(TurnToLiquid+1))/2; +float _ClipUp=1-TurnToLiquid*2; +float Mix=TurnToLiquid+_Distortion; +c1= saturate(((1+noffset)/(1-_ClipUp+0.04))*(1-i.texcoord.y)-noffset); +float r=1-c1; +float2 p2=i.texcoord.xy; +p2.y+=TurnToLiquid-0.2; +p2/=2/(1+Mix/8); +float4 col2 = tex2D(_MainTex2,p2); +col2*=Mix*20; +p+=float2(col2.r/32,col2.g/32); +p.x-=Mix/4; +p.x+=noffset/4; +p.y-=_Distortion/2.3; +float4 col = tex2D(_MainTex,p)*i.color; +col.rgb+=r/2; +col.r+=col2.r/8; +col.gb-=col2.gb/8; +float alpha=1-((0.4+p.y)*TurnToLiquid*2); +return float4(col.rgb,col.a*alpha*(1-_Alpha)); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Blood.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Blood.shader.meta new file mode 100644 index 00000000..94a3a9b5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Blood.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 451aea98d8f0ad24989d9a33ad4be318 +timeCreated: 1529660424 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Blur.shader b/Assets/2DxFX/Resources/_2dxFX_Blur.shader new file mode 100644 index 00000000..2ca0e62d --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Blur.shader @@ -0,0 +1,115 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Blur" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Distortion; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float stepU = 0.00390625f * _Distortion; +float stepV = stepU; + + +float4 result = float4 (0,0,0,0); +float4 Alpha = tex2D(_MainTex, i.texcoord); + +float2 texCoord=float2(0,0); + +texCoord = i.texcoord.xy + float2( -stepU, -stepV ); result += tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( -stepU, 0 ); result += 2.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( -stepU, stepV ); result += tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( 0, -stepV ); result += 2.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy ; result += 4.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( 0, stepV ); result += 2.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( stepU, -stepV ); result += tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( stepU, 0 ); result += 2.0* tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( stepU, -stepV ); result += tex2D(_MainTex,texCoord); + +float4 r=float4(0,0,0,0); +r=result*0.0625; +r.a*=Alpha.a*(1.0-_Alpha); +r=r*i.color; +return r; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Blur.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Blur.shader.meta new file mode 100644 index 00000000..9dd5e968 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Blur.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bc6864c647dc317489a4e7b363e8af8f +timeCreated: 1529660457 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_BlurHQ.shader b/Assets/2DxFX/Resources/_2dxFX_BlurHQ.shader new file mode 100644 index 00000000..aa910a93 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BlurHQ.shader @@ -0,0 +1,135 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/BlurHQ" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Distortion; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float step1 = 0.00390625f * _Distortion*0.5; +float step2 = step1*2; + +float4 result = float4 (0,0,0,0); +float4 Alpha = tex2D(_MainTex, i.texcoord); + +float2 texCoord=float2(0,0); + +texCoord = i.texcoord.xy + float2( -step2, -step2 ); result += tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( -step1, -step2 ); result += 4.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( 0, -step2 ); result += 6.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step1, -step2 ); result += 4.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step2, -step2 ); result += tex2D(_MainTex,texCoord); + +texCoord = i.texcoord.xy + float2( -step2, -step1 ); result += 4.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( -step1, -step1 ); result += 16.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( 0, -step1 ); result += 24.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step1, -step1 ); result += 16.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step2, -step1 ); result += 4.0 * tex2D(_MainTex,texCoord); + +texCoord = i.texcoord.xy + float2( -step2, 0 ); result += 6.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( -step1, 0 ); result += 24.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy; result += 36.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step1, 0 ); result += 24.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step2, 0 ); result += 6.0 * tex2D(_MainTex,texCoord); + +texCoord = i.texcoord.xy + float2( -step2, step1 ); result += 4.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( -step1, step1 ); result += 16.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( 0, step1 ); result += 24.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step1, step1 ); result += 16.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step2, step1 ); result += 4.0 * tex2D(_MainTex,texCoord); + +texCoord = i.texcoord.xy + float2( -step2, step2 ); result += tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( -step1, step2 ); result += 4.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( 0, step2 ); result += 6.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step1, step2 ); result += 4.0 * tex2D(_MainTex,texCoord); +texCoord = i.texcoord.xy + float2( step2, step2 ); result += tex2D(_MainTex,texCoord); + + +float4 r=float4(0,0,0,0); +r=result*0.00390625; +r.a*=(1-_Alpha); +r=r*i.color; +return r; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_BlurHQ.shader.meta b/Assets/2DxFX/Resources/_2dxFX_BlurHQ.shader.meta new file mode 100644 index 00000000..8e188345 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BlurHQ.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: faf2443d7c9cd944da07ee7dfccffe7b +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_BlurHQX.shader b/Assets/2DxFX/Resources/_2dxFX_BlurHQX.shader new file mode 100644 index 00000000..f84a41a9 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BlurHQX.shader @@ -0,0 +1,138 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/BlurHQX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Distortion; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float Gaussian (float sigma, float x) +{ + return exp(-(x*x) / (2.0 * sigma*sigma)); +} + +float4 BlurredPixel (in float2 uv) +{ + int c_samplesX = 16; // must be odd + int c_samplesY = 16; // must be odd + float c_textureSize = 256.0; + + int c_halfSamplesX = c_samplesX / 2; + int c_halfSamplesY = c_samplesY / 2; + float c_pixelSize = (1.0 / c_textureSize); + + float c_sigmaX = 0.1+_Distortion*0.5; + float c_sigmaY = c_sigmaX; + + float total = 0.0; + float4 ret = float4(0,0,0,0); + + for (int iy = 0; iy < c_samplesY; ++iy) + { + float fy = Gaussian (c_sigmaY, float(iy) - float(c_halfSamplesY)); + float offsety = float(iy-c_halfSamplesY) * c_pixelSize; + for (int ix = 0; ix < c_samplesX; ++ix) + { + float fx = Gaussian (c_sigmaX, float(ix) - float(c_halfSamplesX)); + float offsetx = float(ix-c_halfSamplesX) * c_pixelSize; + total += fx * fy; + ret += tex2D(_MainTex, uv + float2(offsetx, offsety)) * fx*fy; + } + } + return ret / total; +} +float4 frag (v2f i) : COLOR +{ +float2 uv=i.texcoord.xy; +float step1 = 0.00390625f * _Distortion*0.5; +float step2 = step1*2; + +float4 result = float4 (0,0,0,0); +float4 Alpha = tex2D(_MainTex, uv); + +float4 r = BlurredPixel(uv); + +r.a*=(1-_Alpha); +r=r*i.color; +return r; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_BlurHQX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_BlurHQX.shader.meta new file mode 100644 index 00000000..ae97afcc --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BlurHQX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d911c0acdd5e3fe4697b49a713dd995f +timeCreated: 1529660460 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_BurnFX.shader b/Assets/2DxFX/Resources/_2dxFX_BurnFX.shader new file mode 100644 index 00000000..c00d8e8d --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BurnFX.shader @@ -0,0 +1,121 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/BurnFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Size ("Size", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float _Distortion; +float _Alpha; +float _Size; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float r (float2 c) +{ +return frac(43.*sin(c.x+7.*c.y)*_Size); +} + +float n (float2 p) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(r(i), r(i+j), w.x), lerp(r(i+j.yx), r(i+1.), w.x), w.y); +} + +float a (float2 p) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ) { m += n(f*p)/f; f+=f; } +return m; +} + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord; +float4 tex = tex2D(_MainTex, uv)*i.color; +float t = frac(_Distortion*0.9999); +float4 c = smoothstep(t/1.0, t+.1, a(3.5*uv)); +float ca2 = smoothstep(t / 2.5, t + .5, a(3.5*uv)); +c=tex*c; +c.r=lerp(c.r - _Distortion, c.r*10.0*(1-c.a)*24,_Distortion); +c.g=lerp(c.g - _Distortion, c.g*10.0*(1-c.a) ,_Distortion); +c.b=lerp(c.b - _Distortion, c.b*10.0*(1-c.a) ,_Distortion); + +return float4(c.rgb,c.a*1-_Alpha); +} + +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_BurnFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_BurnFX.shader.meta new file mode 100644 index 00000000..7996d44b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BurnFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7020fe12c5b6f5b419fe5590d53c31b7 +timeCreated: 1529660435 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_BurningFX.shader b/Assets/2DxFX/Resources/_2dxFX_BurningFX.shader new file mode 100644 index 00000000..7e3cb57f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BurningFX.shader @@ -0,0 +1,117 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// +Shader "2DxFX/Standard/BurningFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Distortion; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +inline float3 Burn(float _t) +{ +float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); +float v = (0.317398726 + 4.22806245e-5*_t + 4.20481691e-8*_t*_t) / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); +float kuv = 2.0 * u - 8.0 * v + 4.0; +float x = 3.0 * u / kuv; +float y = 2.0 * v / kuv; +float z = 1.0 - x - y; +float Y = 1.0; +float YY = Y/y; +float X = YY * x; +float Z = YY * z; +float3 RGB = float3(X,Y,Z); +RGB.x = RGB.x * pow(0.0006*_t*_Distortion, 4.0)/_Distortion; +RGB.y = RGB.y * pow(0.0004*_t*_Distortion, 4.0)/_Distortion; +RGB.z = RGB.z * pow(0.0004*_t*_Distortion, 4.0)*_Distortion; + +return RGB; +} + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord.xy ; +float4 noise = tex2D(_MainTex, uv)*i.color; +float lum = dot(noise.rgb, float3 (0.2126, 0.7152, 0.0722)); +float3 c = Burn(lum * 4000.0); +c=c+noise.rgb; +return float4(c,noise.a*1-_Alpha); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_BurningFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_BurningFX.shader.meta new file mode 100644 index 00000000..193cf917 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_BurningFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 67a342358698d3d40bdb75224532a28a +timeCreated: 1529660435 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Cartoon.shader b/Assets/2DxFX/Resources/_2dxFX_Cartoon.shader new file mode 100644 index 00000000..b77f9fe5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Cartoon.shader @@ -0,0 +1,160 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Cartoon" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_ColorLevel ("ColorLevel", Range(0,1)) = 0 +_EdgeSize ("EdgeSize", Range(0,1)) = 0 +_ColorB ("ColorB", Range(0,1)) = 0 +_Size ("Size", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" +#pragma glsl + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _ColorLevel; +float _EdgeSize; +float _ColorB; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} +#define tex2D(sampler,uvs) tex2Dlod( sampler , float4( ( uvs ) , 0.0f , 0.0f) ) + + +inline float4 edgeFilter(in int px, in int py, v2f i) +{ + +float4 color = float4(0.0,0.0,0.0,0.0); +float2 kUV = i.texcoord*256.0f; +color += tex2D(_MainTex, (kUV + float2(px + 1, py + 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px , py + 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px - 1, py + 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px + 1, py )) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px , py )) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px - 1, py )) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px + 1, py - 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px , py - 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(px - 1, py - 1)) * 0.00390625f); + + +return color / 9.0; + +} + + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord; +float4 tex = tex2D(_MainTex, uv); + +float4 color = float4(0,0,0,0); +float2 kUV = uv*256.0f; +color += tex2D(_MainTex, (kUV + float2( 1 , 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2( 0 , 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(-1 , 1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2( 1 , 0)) * 0.00390625f); +color += tex2D(_MainTex, (kUV ) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(-1 , 0)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2( 1 , -1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2( 0 , -1)) * 0.00390625f); +color += tex2D(_MainTex, (kUV + float2(-1 , -1)) * 0.00390625f); + +color /= 9.0; + +color *=i.color; + +color[0] = floor(7.0 * color[0]) / _ColorLevel; +color[1] = floor(7.0 * color[1]) / _ColorLevel; +color[2] = floor(7.0 * color[2]) / _ColorLevel; + + +float4 sum = abs(edgeFilter(0, 1, i) - edgeFilter(0, -1, i)); +sum += abs(edgeFilter(1, 0, i) - edgeFilter(-1, 0, i)); +sum /= 2.0; + +float edgsum = _EdgeSize + 0.05; +if(length(sum) > edgsum) { +color.rgb = 0.0; +} + + + +return float4(color.rgb,tex.a*1-_Alpha); + + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Cartoon.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Cartoon.shader.meta new file mode 100644 index 00000000..8ea54352 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Cartoon.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f20c0434d50ae354182f4803f0369150 +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_CircleFade.shader b/Assets/2DxFX/Resources/_2dxFX_CircleFade.shader new file mode 100644 index 00000000..7fba4e1d --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_CircleFade.shader @@ -0,0 +1,99 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/CircleFade" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Offset ("Offset", Range(-1,1)) = 0.5 +_InOut ("InOut", Range(0,1)) = 0.5 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float _Offset; +float _InOut; +float _Alpha; + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord.xy; +float4 tex = tex2D(_MainTex, uv)*i.color; +float alpha = tex.a; +float2 center = float2(0.5,0.5); +float dist = 1.0 - smoothstep( _Offset,_Offset+0.15, length(center-uv) ); +float c=0; +if (_InOut==0) { c = dist; } else { c= 1-dist; } +tex.a = alpha*c-_Alpha; +return tex; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} diff --git a/Assets/2DxFX/Resources/_2dxFX_CircleFade.shader.meta b/Assets/2DxFX/Resources/_2dxFX_CircleFade.shader.meta new file mode 100644 index 00000000..7c021015 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_CircleFade.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b2ab8e766cb012d42875a0247992eaa4 +timeCreated: 1529660455 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Clipping.shader b/Assets/2DxFX/Resources/_2dxFX_Clipping.shader new file mode 100644 index 00000000..f692f6f3 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Clipping.shader @@ -0,0 +1,103 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Clipping" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_ClipLeft ("Clipping Left", Range(0,1)) = 1 +_ClipRight ("Clipping Right", Range(0,1)) = 1 +_ClipUp ("Clipping Up", Range(0,1)) = 1 +_ClipDown ("Clipping Down", Range(0,1)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float _Size; +float _ClipLeft; +float _ClipRight; +float _ClipUp; +float _ClipDown; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float4 mainColor = tex2D(_MainTex, i.texcoord)*i.color; + +if ( i.texcoord.y > _ClipUp) mainColor = float4(0,0,0,0); +if ( i.texcoord.y < 1-_ClipDown) mainColor = float4(0,0,0,0); +if ( i.texcoord.x > _ClipRight) mainColor = float4(0,0,0,0); +if ( i.texcoord.x < 1-_ClipLeft) mainColor = float4(0,0,0,0); + +mainColor.a = mainColor.a-_Alpha; +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Clipping.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Clipping.shader.meta new file mode 100644 index 00000000..44400c8e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Clipping.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 456ce9da2500be94093854eb83a6057d +timeCreated: 1529660424 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Color.shader b/Assets/2DxFX/Resources/_2dxFX_Color.shader new file mode 100644 index 00000000..958de5f0 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Color.shader @@ -0,0 +1,93 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Color" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_ColorX ("Tint", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; + +}; + +sampler2D _MainTex; +float _Size; +float4 _Color; +float4 _ColorX; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float4 c = tex2D(_MainTex, i.texcoord)*i.color; +c.rgb = _ColorX.rgb; +c.a=c.a-_Alpha; +return c; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Color.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Color.shader.meta new file mode 100644 index 00000000..05026418 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Color.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 974b3eabc8626e944a34ed8cfc635bb2 +timeCreated: 1529660444 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_ColorChange.shader b/Assets/2DxFX/Resources/_2dxFX_ColorChange.shader new file mode 100644 index 00000000..48420586 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_ColorChange.shader @@ -0,0 +1,134 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/ColorChange" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_ColorX ("Tint", Color) = (1,1,1,1) +_HueShift ("Hue", Range (0,1)) = 1.0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Tolerance ("Tolerance", Range (0,1)) = 1.0 +_Sat("Saturation", Float) = 1 +_Val("Value", Float) = 1 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; + +}; + +sampler2D _MainTex; +float _Size; +float _HueShift; +float _Tolerance; +float4 _Color; +float4 _ColorX; +float _Alpha; +float _Sat; +float _Val; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} +float3 shift_col(float3 RGB, float3 shift) +{ + +float3 RESULT = float3(RGB); +float a1= shift.z*shift.y; +float a2= shift.x*3.14159265/180; +float VSU = a1*cos(a2); +float VSW = a1*sin(a2); + +RESULT.x = (.299*shift.z+.701*VSU+.168*VSW)*RGB.x ++ (.587*shift.z-.587*VSU+.330*VSW)*RGB.y ++ (.114*shift.z-.114*VSU-.497*VSW)*RGB.z; + +RESULT.y = (.299*shift.z-.299*VSU-.328*VSW)*RGB.x ++ (.587*shift.z+.413*VSU+.035*VSW)*RGB.y ++ (.114*shift.z-.114*VSU+.292*VSW)*RGB.z; + +RESULT.z = (.299*shift.z-.3*VSU+1.25*VSW)*RGB.x ++ (.587*shift.z-.588*VSU-1.05*VSW)*RGB.y ++ (.114*shift.z+.886*VSU-.203*VSW)*RGB.z; + +return (RESULT); +} + + +float4 frag (v2f i) : COLOR +{ +float4 c = tex2D(_MainTex, i.texcoord)*i.color; +float3 shift = float3(_HueShift, _Sat, _Val); +float3 shifted= shift_col(c, shift); +float3 c1=c.rgb; +c1=c1-_ColorX.rgb; +c1=abs(c1); +if (c1.r<_Tolerance) c.rgb=shifted; +if (c1.g<_Tolerance) c.rgb=shifted; +if (c1.b<_Tolerance) c.rgb=shifted; + +c.a=c.a-_Alpha; +return c; +} + +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_ColorChange.shader.meta b/Assets/2DxFX/Resources/_2dxFX_ColorChange.shader.meta new file mode 100644 index 00000000..422d8f2f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_ColorChange.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9f1ae124906dd1a41bee3c95860f3a4f +timeCreated: 1529660447 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_ColorRGB.shader b/Assets/2DxFX/Resources/_2dxFX_ColorRGB.shader new file mode 100644 index 00000000..628b737f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_ColorRGB.shader @@ -0,0 +1,103 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/ColorRGB" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_ColorR ("ColorR", Range(0,1)) = 0 +_ColorG ("ColorG", Range(0,1)) = 0 +_ColorB ("ColorB", Range(0,1)) = 0 +_Size ("Size", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _ColorR; +float _ColorG; +float _ColorB; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord; +float4 tex = tex2D(_MainTex, uv)*i.color; +tex.r+=_ColorR; +tex.g+=_ColorG; +tex.b+=_ColorB; +return float4(tex.rgb,tex.a*1-_Alpha); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_ColorRGB.shader.meta b/Assets/2DxFX/Resources/_2dxFX_ColorRGB.shader.meta new file mode 100644 index 00000000..7d896133 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_ColorRGB.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6a5def8daa8e86e479081efa80a752c9 +timeCreated: 1529660435 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_CompressionFX.shader b/Assets/2DxFX/Resources/_2dxFX_CompressionFX.shader new file mode 100644 index 00000000..63c677a0 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_CompressionFX.shader @@ -0,0 +1,119 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/CompressionFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Distortion; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + + +float rng2(float2 seed) +{ +return frac(sin(dot(seed * floor(50+(_Time+0.1) * 12.), float2(127.1,311.7))) * 43758.5453123); +} + +float rng(float seed) +{ +return rng2(float2(seed, 1.0)); +} + + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord.xy; +float2 blockS = floor(uv * float2(24., 19.))*4.0; +float2 blockL = floor(uv * float2(38., 14.))*4.0; +float r = rng2(uv); +float lineNoise = pow(rng2(blockS), 3.0) *_Distortion* pow(rng2(blockL), 3.0); +float4 col1 = tex2D(_MainTex, uv + float2(lineNoise * 0.02 * rng(2.0), 0))*i.color; +float4 result= float4(float3(col1.x, col1.y, col1.z), 1.0); +result.a = col1.a*1-_Alpha; + +return result; + + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} diff --git a/Assets/2DxFX/Resources/_2dxFX_CompressionFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_CompressionFX.shader.meta new file mode 100644 index 00000000..63376219 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_CompressionFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c320d96f66882c04d9dbd4bbd276ff0b +timeCreated: 1529660457 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_DesintegrationFX.shader b/Assets/2DxFX/Resources/_2dxFX_DesintegrationFX.shader new file mode 100644 index 00000000..f7d53ca8 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_DesintegrationFX.shader @@ -0,0 +1,131 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/DesintegrationFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_ColorX ("Tint", Color) = (1,1,1,1) +_Size ("Size", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float4 _Color; +float4 _ColorX; +float _Alpha; +float _Size; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float r (float2 c) +{ +return frac(43.*sin(c.x+7.*c.y)*_Size); +} + +float n (float2 p) +{ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(r(i), r(i+j), w.x), lerp(r(i+j.yx), r(i+1.), w.x), w.y); +} + +float a (float2 p) +{ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += n(f*p)/f; f+=f; } +return m; +} + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord; +float4 tex = tex2D(_MainTex, uv)*i.color; + +float t = frac(_Distortion*0.9999); +float4 c= smoothstep(t/1.2, t+.1, a(3.5*uv)); + +c=tex*c; + +c.r=lerp(c.r,c.r*(1-c.a)+_ColorX.r,_Distortion); +c.g=lerp(c.g,c.g*(1-c.a)+_ColorX.g,_Distortion); +c.b=lerp(c.b,c.b*(1-c.a)+_ColorX.b,_Distortion); + +return float4(c.rgb,c.a*1-_Alpha); + + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} diff --git a/Assets/2DxFX/Resources/_2dxFX_DesintegrationFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_DesintegrationFX.shader.meta new file mode 100644 index 00000000..d382a6e0 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_DesintegrationFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ce4224df67ec334448f99b6cb00020ea +timeCreated: 1529660460 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_DestroyedFX.shader b/Assets/2DxFX/Resources/_2dxFX_DestroyedFX.shader new file mode 100644 index 00000000..3b68d146 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_DestroyedFX.shader @@ -0,0 +1,123 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/DestroyedFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Size ("Size", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Distortion; +float _Alpha; +float _Size; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float r (float2 c){ +return frac(43.*sin(c.x+7.*c.y)*_Size); +} + +float n (float2 p){ +float2 i = floor(p), w = p-i, j = float2 (1.,0.); +w = w*w*(3.-w-w); +return lerp(lerp(r(i), r(i+j), w.x), lerp(r(i+j.yx), r(i+1.), w.x), w.y); +} + +float a (float2 p){ +float m = 0., f = 2.; +for ( int i=0; i<9; i++ ){ m += n(f*p)/f; f+=f; } +return m; +} + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord; +float4 tex = tex2D(_MainTex, uv)*i.color; +float t = frac(_Distortion*0.9999); +float4 c = smoothstep(t/1.2, t+.1, a(3.5*uv)); +c=tex*c; +c.r=lerp(c.r,c.r*15.0*(1-c.a)*8,_Distortion); +c.g=lerp(c.g,c.g*10.0*(1-c.a)*4,_Distortion); +c.b=lerp(c.b,c.b*5.0*(1-c.a),_Distortion); + +return float4(c.rgb,c.a*1-_Alpha); + + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_DestroyedFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_DestroyedFX.shader.meta new file mode 100644 index 00000000..a85c9a27 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_DestroyedFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 03483841f51af684c898cc7130d99ff5 +timeCreated: 1529660408 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Distortion.shader b/Assets/2DxFX/Resources/_2dxFX_Distortion.shader new file mode 100644 index 00000000..fa461912 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Distortion.shader @@ -0,0 +1,104 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Distortion" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_OffsetX ("OffsetX", Range(0,128)) = 0 +_OffsetY ("OffsetY", Range(0,128)) = 0 +_DistanceX ("DistanceX", Range(0,1)) = 0 +_DistanceY ("DistanceY", Range(0,1)) = 0 +_WaveTimeX ("WaveTimeX", Range(0,360)) = 0 +_WaveTimeY ("WaveTimeY", Range(0,360)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _OffsetX; +float _OffsetY; +float4 _Color; +float _DistanceX; +float _DistanceY; +float _WaveTimeX; +float _WaveTimeY; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +float2 p=IN.texcoord; +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag(v2f IN) : COLOR +{ +float2 p=IN.texcoord; +p.x= p.x+sin(p.y*_OffsetX+_WaveTimeX)*_DistanceX; +p.y= p.y+cos(p.x*_OffsetY+_WaveTimeY)*_DistanceY; + +float4 mainColor = tex2D(_MainTex, p)* IN.color; +mainColor.a-=_Alpha; +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Distortion.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Distortion.shader.meta new file mode 100644 index 00000000..0bb0ffc5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Distortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ad4f123e93904634a90c4733b070f839 +timeCreated: 1529660453 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Distortion_Additive.shader b/Assets/2DxFX/Resources/_2dxFX_Distortion_Additive.shader new file mode 100644 index 00000000..72446607 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Distortion_Additive.shader @@ -0,0 +1,104 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Distortion_Additive" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_OffsetX ("OffsetX", Range(0,128)) = 0 +_OffsetY ("OffsetY", Range(0,128)) = 0 +_DistanceX ("DistanceX", Range(0,1)) = 0 +_DistanceY ("DistanceY", Range(0,1)) = 0 +_WaveTimeX ("WaveTimeX", Range(0,360)) = 0 +_WaveTimeY ("WaveTimeY", Range(0,360)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _OffsetX; +float _OffsetY; +float4 _Color; +float _DistanceX; +float _DistanceY; +float _WaveTimeX; +float _WaveTimeY; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +float2 p=IN.texcoord; +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag(v2f IN) : COLOR +{ +float2 p=IN.texcoord; +p.x= p.x+sin(p.y*_OffsetX+_WaveTimeX)*_DistanceX; +p.y= p.y+cos(p.x*_OffsetY+_WaveTimeY)*_DistanceY; + +float4 mainColor = tex2D(_MainTex, p)* IN.color; +mainColor.a-=_Alpha; +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Distortion_Additive.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Distortion_Additive.shader.meta new file mode 100644 index 00000000..3624e15a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Distortion_Additive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 46d5fc8d589f09448ad31aa8103516d2 +timeCreated: 1529660424 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_EdgeColor.shader b/Assets/2DxFX/Resources/_2dxFX_EdgeColor.shader new file mode 100644 index 00000000..f62a91b5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_EdgeColor.shader @@ -0,0 +1,108 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/EdgeColor" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("_Color", Color) = (1,1,1,1) +_ColorX ("Tint", Color) = (1,1,1,1) + +// required for UI.Mask +_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 + + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float4 _ColorX; + +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 getPixel(in int x, in int y, v2f i) +{ +return tex2D(_MainTex, ((i.texcoord.xy ) + float2(x, y)/64.0)); +} + +float4 frag (v2f i) : COLOR +{ +float4 sum = abs(getPixel(0, 1, i) - getPixel(0, -1, i)); +sum += abs(getPixel(1, 0, i) - getPixel(-1, 0, i)); +sum /= 2.0; +float4 color = getPixel(0, 0, i)*i.color; +color += length(sum) * _ColorX; +color.a = color.a*(1-_Alpha); +return color; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_EdgeColor.shader.meta b/Assets/2DxFX/Resources/_2dxFX_EdgeColor.shader.meta new file mode 100644 index 00000000..1eb01dca --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_EdgeColor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9f6f5764ea9c1fe4eb7edce591a7c442 +timeCreated: 1529660447 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_EnergyBar.shader b/Assets/2DxFX/Resources/_2dxFX_EnergyBar.shader new file mode 100644 index 00000000..0aa0cccb --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_EnergyBar.shader @@ -0,0 +1,112 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/EnergyBar" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Value1 ("_Value1", Range(0,1)) = 1 +_Value2 ("_Value2", Range(0,1)) = 1 +_Value3 ("_Value3", Range(0,1)) = 1 +_Value4 ("_Value4", Range(0,1)) = 1 +_Value5 ("_Value5", Range(0,1)) = 1 + +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float _Size; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 uv=i.texcoord; +float4 mainColor = tex2D(_MainTex, i.texcoord)*i.color; +float energy= smoothstep( _Value1-_Value2,_Value1+_Value2, uv.x); +float xx=smoothstep( 0.15-0.1,0.15+0.1, uv.x)*_Value1; +float3 C1 = float3(1,0,0); +float3 C2 = mainColor.rgb; +C1=lerp(mainColor.rgb,C1,_Value4); +C1=lerp(C1,mainColor.rgb,xx); +float3 CR = lerp(C1,C2,_Value1); +float4 CRA= float4(CR,mainColor.a); +mainColor= lerp(CRA,mainColor-float4(_Value3,_Value3,_Value3,1-_Value5),energy); +mainColor.a = mainColor.a-_Alpha; + +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_EnergyBar.shader.meta b/Assets/2DxFX/Resources/_2dxFX_EnergyBar.shader.meta new file mode 100644 index 00000000..6d37d812 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_EnergyBar.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4c3cce95d64bead45975f2f21fcff33e +timeCreated: 1529660426 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Fire.shader b/Assets/2DxFX/Resources/_2dxFX_Fire.shader new file mode 100644 index 00000000..92f7eda3 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Fire.shader @@ -0,0 +1,142 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Fire" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 + + +// required for UI.Mask +_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 + + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float4 frag(v2f IN) : COLOR +{ + +float speed=_Value1; +float2 uv=IN.texcoord; + +uv/=8; +uv/=1.4; +uv-=float2(-0.022,-0.022); +float tm=_Time; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +float4 t2 = tex2D(_MainTex2, uv); + +uv=IN.texcoord; +uv/=8; +uv+=float2(-0.05,0); +tm+=0.2; +uv/=1.4; +uv-=float2(-0.022,-0.022); +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); + +uv=IN.texcoord; +uv/=8; +uv+=float2(-0.025,-0.02); +tm+=0.4; +uv/=1.4; +uv-=float2(-0.022,-0.022); +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); + +float4 t = tex2D(_MainTex, IN.texcoord+float2(t2.r/64,t2.r/64))*IN.color; +t2.a = t.a; + + +t.rgb+=t2*_Value2; + + +return float4(t.rgb,t.a*(1-_Alpha)); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Fire.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Fire.shader.meta new file mode 100644 index 00000000..23a290fe --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Fire.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8bacdd7a0932ef54ba2172450362971a +timeCreated: 1529660442 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_FireAdditive.shader b/Assets/2DxFX/Resources/_2dxFX_FireAdditive.shader new file mode 100644 index 00000000..557d091c --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_FireAdditive.shader @@ -0,0 +1,136 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/FireAdditive" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float4 frag(v2f IN) : COLOR +{ +float4 t = tex2D(_MainTex, IN.texcoord)*IN.color; +float speed=_Value1; +float2 uv=IN.texcoord; +uv/=8; +uv/=1.4; +uv-=float2(-0.022,-0.022); +float tm=_Time; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +float4 t2 = tex2D(_MainTex2, uv); + +uv=IN.texcoord; +uv/=8; +uv+=float2(-0.05,0); +tm+=0.2; +uv/=1.4; +uv-=float2(-0.022,-0.022); +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); + +uv=IN.texcoord; +uv/=8; +uv+=float2(-0.025,-0.02); +tm+=0.4; +uv/=1.4; +uv-=float2(-0.022,-0.022); +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); + +t2.a = t.a; +t.rgb=lerp(t2*_Value2,t+(t2*_Value2),_Value3); + + +return float4(t.rgb,t.a*(1-_Alpha)); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_FireAdditive.shader.meta b/Assets/2DxFX/Resources/_2dxFX_FireAdditive.shader.meta new file mode 100644 index 00000000..d3c63ae5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_FireAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4fc9d00a1d741074e80b30dbf06dfa0b +timeCreated: 1529660427 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_FireTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_FireTXT.jpg new file mode 100644 index 00000000..3eb7d824 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_FireTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_FireTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_FireTXT.jpg.meta new file mode 100644 index 00000000..d85664a7 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_FireTXT.jpg.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 167023acf6c0d8546947dbade221cda9 +timeCreated: 1529660401 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Web + maxTextureSize: 1024 + textureFormat: 2 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Flame.shader b/Assets/2DxFX/Resources/_2dxFX_Flame.shader new file mode 100644 index 00000000..de513574 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Flame.shader @@ -0,0 +1,139 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Flame" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_MainTex2 ("Base (RGB)", 2D) = "white" {} +_Speed ("_Speed", Range(4,128)) = 4 +_Intensity ("_Intensity", Range(4,128)) = 4 +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 + +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +sampler2D _MainTex2; +float _Speed; +float _Intensity; +float _Alpha; +float4 _Color; + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + + + +// ----------------------------------------------- +float4 frag (v2f i) : COLOR +{ + + float2 uv = i.texcoord.xy; + float2 _uv = uv; + float _TimeX=_Time*128*_Speed; + uv -= float2(0.5,0.5); + float2 centerUV = uv; + float2 offset = float2(0.0, -_TimeX * 0.15); + + // flame thickness + float2 uv2=i.texcoord+offset; + float2 uv3=i.texcoord+offset*1.5; + uv2.y/=16; + uv3.y/=12; + + float flame = 1.3 - length(uv.x) * 3.0; + float4 t3 = tex2D(_MainTex2,uv3); + float4 t2 = tex2D(_MainTex2,uv2); + + float variationH = t3.g-t2.g; + + uv2.x += i.texcoord.y*cos(_TimeX)/8; + float4 t = tex2D(_MainTex, float2(uv2.x,i.texcoord.y)); + flame *= smoothstep(1., variationH * _Intensity, _uv.y); + flame = clamp(flame, 0.0, 1.0); + flame = pow(flame, 3.); + flame /= smoothstep(1.1, -0.1, _uv.y*t.a); + // colors + + flame *= t.a; + + // colors + float4 col = lerp(float4(1.0, 1., 0.0, 0.0), float4(1.0, 1.0, .6, 0.0), flame); + col = lerp(float4(1.0, .0, 0.0, 0.0), col, smoothstep(0.0, 1.6, flame)); + col = lerp(float4(0.0, .0, 1.0, 0.0), col, smoothstep(0.0, 0.7, flame)); + + t2=col*1.2; + t2.a = t2.r*flame*_Alpha; + + return t2*i.color; + +} +ENDCG + +} +} +Fallback "Sprites/Default" + +} diff --git a/Assets/2DxFX/Resources/_2dxFX_Flame.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Flame.shader.meta new file mode 100644 index 00000000..96766a96 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Flame.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1cabda03e37094e4db2839da6a45f789 +timeCreated: 1529660418 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_FlameAdditive.shader b/Assets/2DxFX/Resources/_2dxFX_FlameAdditive.shader new file mode 100644 index 00000000..0ad70a5f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_FlameAdditive.shader @@ -0,0 +1,139 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/FlameAdditive" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_MainTex2 ("Base (RGB)", 2D) = "white" {} +_Speed ("_Speed", Range(4,128)) = 4 +_Intensity ("_Intensity", Range(4,128)) = 4 +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 + +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +sampler2D _MainTex2; +float _Speed; +float _Intensity; +float _Alpha; +float4 _Color; + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + + + +// ----------------------------------------------- +float4 frag (v2f i) : COLOR +{ + + float2 uv = i.texcoord.xy; + float2 _uv = uv; + float _TimeX=_Time*128*_Speed; + uv -= float2(0.5,0.5); + float2 centerUV = uv; + float2 offset = float2(0.0, -_TimeX * 0.15); + + // flame thickness + float2 uv2=i.texcoord+offset; + float2 uv3=i.texcoord+offset*1.5; + uv2.y/=16; + uv3.y/=12; + + float flame = 1.3 - length(uv.x) * 3.0; + float4 t3 = tex2D(_MainTex2,uv3); + float4 t2 = tex2D(_MainTex2,uv2); + + float variationH = t3.g-t2.g; + + uv2.x += i.texcoord.y*cos(_TimeX)/8; + float4 t = tex2D(_MainTex, float2(uv2.x,i.texcoord.y)); + flame *= smoothstep(1., variationH * _Intensity, _uv.y); + flame = clamp(flame, 0.0, 1.0); + flame = pow(flame, 3.); + flame /= smoothstep(1.1, -0.1, _uv.y*t.a); + // colors + + flame *= t.a; + + // colors + float4 col = lerp(float4(1.0, 1., 0.0, 0.0), float4(1.0, 1.0, .6, 0.0), flame); + col = lerp(float4(1.0, .0, 0.0, 0.0), col, smoothstep(0.0, 1.6, flame)); + col = lerp(float4(0.0, .0, 1.0, 0.0), col, smoothstep(0.0, 0.7, flame)); + + t2=col*1.2; + t2.a = t2.r*flame*_Alpha; + + return t2*i.color; + +} +ENDCG + +} +} +Fallback "Sprites/Default" + +} diff --git a/Assets/2DxFX/Resources/_2dxFX_FlameAdditive.shader.meta b/Assets/2DxFX/Resources/_2dxFX_FlameAdditive.shader.meta new file mode 100644 index 00000000..c13de8a3 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_FlameAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bdf7465a45ee12a469e70401a7f18883 +timeCreated: 1529660457 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_FlameTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_FlameTXT.jpg new file mode 100644 index 00000000..b1c7b9f3 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_FlameTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_FlameTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_FlameTXT.jpg.meta new file mode 100644 index 00000000..0026383b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_FlameTXT.jpg.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 5abf4696e4d186d4390fe5599489aa02 +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 512 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Frozen.shader b/Assets/2DxFX/Resources/_2dxFX_Frozen.shader new file mode 100644 index 00000000..06de9315 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Frozen.shader @@ -0,0 +1,131 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Frozen" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float hardLight( float s, float d ) +{ + return (s < 0.5) ? 2.0 * s * d : 1.0 - 2.0 * (1.0 - s) * (1.0 - d); +} + +float3 hardLight( float3 s, float3 d ) +{ + float3 c=float3(0,0,0); + c.x = hardLight(s.x,d.x); + c.y = hardLight(s.y,d.y); + c.z = hardLight(s.z,d.z); + return c; +} + +float4 frag(v2f IN) : COLOR +{ + +float speed=_Time*2; +float2 uv=IN.texcoord; +uv=uv*(1-(_Value2*0.4))+float2(_Value2*0.2,_Value2*0.2); +float4 t2 = tex2D(_MainTex2, uv); +uv=uv*(1-(_Value2*0.4))+float2(_Value2*0.2,_Value2*0.2); +float4 t3 = tex2D(_MainTex2, uv)*2; +uv=IN.texcoord+float2(-_Value2-speed,0); +float4 t4 = tex2D(_MainTex2, uv+float2(t2.r,t2.r))*0.5; +float tx=t3.b; +tx=lerp(0,t3.b*0.015,_Value2); +float4 td = tex2D(_MainTex, IN.texcoord)*IN.color; +float4 t = tex2D(_MainTex, IN.texcoord+float2(tx,tx))*IN.color; +t2.a = t.a; +t2.rgb = float3(t2.r/10,t2.r/1.5,t2.r); +float g = (t.r+t.g+t.b)/3; +float3 r = smoothstep(_Value1,_Value1+0.1,g)+.2; +t.rgb=lerp(t.rgb,hardLight(g,t2.rgb)+t2.b*r*t3.b+t4.g,_Value2); +return float4(t.rgb,t.a*(1-_Alpha)); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Frozen.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Frozen.shader.meta new file mode 100644 index 00000000..58a03021 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Frozen.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 089d086d024adc44b8ee2e563a93dbdc +timeCreated: 1529660410 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_FrozenTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_FrozenTXT.jpg new file mode 100644 index 00000000..f71512b3 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_FrozenTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_FrozenTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_FrozenTXT.jpg.meta new file mode 100644 index 00000000..3e04f0d9 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_FrozenTXT.jpg.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 4aa6ce280e1ca944fb25732fe398d905 +timeCreated: 1529660403 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Web + maxTextureSize: 512 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Ghost.shader b/Assets/2DxFX/Resources/_2dxFX_Ghost.shader new file mode 100644 index 00000000..b9e0ab9c --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Ghost.shader @@ -0,0 +1,106 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Ghost" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_ClipLeft ("Clipping Left", Range(0,1)) = 1 +_ClipRight ("Clipping Right", Range(0,1)) = 1 +_ClipUp ("Clipping Up", Range(0,1)) = 1 +_ClipDown ("Clipping Down", Range(0,1)) = 1 +_offset ("offset", Range(0,1)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float _Alpha; +float _offset; +float _ClipLeft; +float _ClipRight; +float _ClipUp; +float _ClipDown; + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float4 mainColor = tex2D(_MainTex, i.texcoord)*i.color; +float alpha=mainColor.a; +float c1=1; +float noffset=_offset; +if ( i.texcoord.y > _ClipUp) c1= saturate(((1+noffset)/(1-_ClipUp))*(1-i.texcoord.y)-noffset); +if ( i.texcoord.y < 1-_ClipDown) c1*= saturate(((1+noffset)/(1-_ClipDown))*i.texcoord.y-noffset); +if ( i.texcoord.x > _ClipRight) c1*= saturate(((1+noffset)/(1-_ClipRight))*(1-i.texcoord.x)-noffset); +if ( i.texcoord.x < 1-_ClipLeft) c1*= saturate(((1+noffset)/(1-_ClipLeft))*i.texcoord.x-noffset); + mainColor.a = (alpha*c1)-_Alpha; + return float4(mainColor.rgb,mainColor.a); +} + +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Ghost.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Ghost.shader.meta new file mode 100644 index 00000000..8caa057c --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Ghost.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ded7385c02255b14dbaf341d486e6beb +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_GoldFX.shader b/Assets/2DxFX/Resources/_2dxFX_GoldFX.shader new file mode 100644 index 00000000..9c76e72a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GoldFX.shader @@ -0,0 +1,161 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/GoldFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + + + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float3 Metal(float _t) +{ + + float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) + / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); + + float v = (0.317398726 + 4.22806245e-5*_t + 4.20481691e-8*_t*_t) + / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); + + float x = 3.0 * u / (2.0 * u - 8.0 * v + 4.0); + float y = 2.0 * v / (2.0 * u - 8.0 * v + 4.0); + float z = 1.0 - x - y; + + float Y = 1.0; + float X = (Y/y) * x; + float Z = (Y/y) * z; + + float3 RGB = float3(X/2,Y*2,Z)/_Distortion; + + RGB.x = RGB.x * pow(0.0006*_t, 4.0); + RGB.y = RGB.y * pow(0.0004*_t, 4.0); + RGB.z = RGB.z * pow(0.0004*_t, 4.0); + + return RGB; +} +inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float4 rainbow(float t) +{ + t=mod(t,1.0); + float tx = t * 6.0; + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + return float4(1.0, 1.0, 1.0,r); +} + +float4 plasma(float2 uv) +{ + float2 tuv = uv; + uv *= 2.5; + float a = 1.1 + _Time *20 * 2.25; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + n += tex2D(_MainTex, tuv).r * 0.2 + tex2D(_MainTex, tuv).g * 0.4 + tex2D(_MainTex, tuv).b * 0.2; + + return rainbow(n); +} + + + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord.xy ; + + float4 noise = tex2D(_MainTex, uv)*i.color; + float lum = dot(noise.rgb, float3 (0.2126, 0.7152, 0.0722)); + float maxTemp = 4000.0; + float tempScale = maxTemp; + float3 c = Metal(lum * tempScale); + float alpha = tex2D(_MainTex, i.texcoord).a*i.color.a; + float4 sortie=plasma(i.texcoord); + sortie.a=sortie.a*alpha-_Alpha; + sortie.r=sortie.a; + sortie.g=sortie.a; + sortie.b=sortie.a; + sortie.rgb=c.rgb+(1-sortie.a); + return float4(sortie.rgb,noise.a*1-_Alpha); + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_GoldFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_GoldFX.shader.meta new file mode 100644 index 00000000..e361796b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GoldFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e119c2182318cab46b7ce5b0e7bc3e15 +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_GoldenFX.shader b/Assets/2DxFX/Resources/_2dxFX_GoldenFX.shader new file mode 100644 index 00000000..745967e7 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GoldenFX.shader @@ -0,0 +1,118 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/GoldenFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ + + + float2 uv = i.texcoord.xy; + + float2 step = float2(0.004,0.004); + + float4 tex = tex2D( _MainTex, uv); + float calc= 1.5 *_Distortion; + float3 texA = tex2D( _MainTex, uv + float2(-step.x, -step.y) * calc).rgb; + float3 texB = tex2D( _MainTex, uv + float2( step.x, -step.y) * calc).rgb; + float3 texC = tex2D( _MainTex, uv + float2(-step.x, step.y) * calc).rgb; + float3 texD = tex2D( _MainTex, uv + float2( step.x, step.y) * calc).rgb; + float shadeA = dot(texA, 0.333333); + float shadeB = dot(texB, 0.333333); + float shadeC = dot(texC, 0.333333); + float shadeD = dot(texD, 0.333333); + float shade = 15.0 * pow(max(abs(shadeA - shadeD), abs(shadeB - shadeC)), 0.5); + + float3 col = lerp(float3(0.1, 0.18, 0.3), float3(0.4, 0.3, 0.2), shade); + + tex.a = tex.a*1-_Alpha; + float4 r=float4(col,tex.a); + r*=i.color; + return r; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_GoldenFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_GoldenFX.shader.meta new file mode 100644 index 00000000..88b08990 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GoldenFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 59eb8cf642da9824ca1d7b5383d03370 +timeCreated: 1529660430 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Gradient.jpg b/Assets/2DxFX/Resources/_2dxFX_Gradient.jpg new file mode 100644 index 00000000..1f6e71f2 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_Gradient.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_Gradient.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_Gradient.jpg.meta new file mode 100644 index 00000000..8c7521c9 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Gradient.jpg.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 6ed1aafd335608e48aa3198044a161df +timeCreated: 1529660404 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_GrassFX.shader b/Assets/2DxFX/Resources/_2dxFX_GrassFX.shader new file mode 100644 index 00000000..5e6c5557 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GrassFX.shader @@ -0,0 +1,111 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/GrassFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Wind ("_Wind", Range(0.0, 10.0)) = 1 +_Wind2 ("_Wind2", Range(0.0, 10.0)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Wind; +float _Wind2; +float _Alpha; +float _Speed; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord; +float time=_Time*8*_Speed; + +float sn=uv.x+_Wind; +float sy=uv.y/_Distortion; +uv.x=abs(lerp(uv.x,sn,sy)); +uv.x=fmod(uv.x,1); + + +float4 rcol=tex2D(_MainTex, uv)*i.color; +rcol.a = rcol.a*1-_Alpha; +return rcol; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_GrassFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_GrassFX.shader.meta new file mode 100644 index 00000000..18e18b47 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GrassFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: df5d693f3c96e004b8e2142c6c354646 +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_GrassMultiFX.shader b/Assets/2DxFX/Resources/_2dxFX_GrassMultiFX.shader new file mode 100644 index 00000000..03b4d064 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GrassMultiFX.shader @@ -0,0 +1,155 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/GrassMultiFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Wind ("_Wind", Range(0.0, 10.0)) = 1 +_Wind2 ("_Wind2", Range(0.0, 10.0)) = 1 +_Wind3 ("_Wind2", Range(0.0, 10.0)) = 1 +_Wind4 ("_Wind2", Range(0.0, 10.0)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Wind; +float _Wind2; +float _Wind3; +float _Wind4; +float _Alpha; +float _Speed; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord; +float2 uv2 = i.texcoord+float2(0.2,0.01); +float2 uv3 = i.texcoord+float2(0.4,0.02); +float2 uv4 = i.texcoord+float2(0.6,0.03); +float time=_Time*8*_Speed; + +float sn=uv.x+_Wind; +float sy=uv.y/_Distortion; +uv.x=abs(lerp(uv.x,sn,sy)); +uv.x=fmod(uv.x,1); +sn=uv2.x+_Wind2; +sy=uv2.y/_Distortion; +uv2.x=abs(lerp(uv2.x,sn,sy)); +uv2.x=fmod(uv2.x,1); +sn=uv3.x+_Wind3; +sy=uv3.y/_Distortion; +uv3.x=abs(lerp(uv3.x,sn,sy)); +uv3.x=fmod(uv3.x,1); +sn=uv4.x+_Wind4; +sy=uv4.y/_Distortion; +uv4.x=abs(lerp(uv4.x,sn,sy)); +uv4.x=fmod(uv4.x,1); + + +float4 r1=tex2D(_MainTex, uv)*i.color; +float4 r2=tex2D(_MainTex, uv2)*i.color; +float4 r3=tex2D(_MainTex, uv3)*i.color; +float4 r4=tex2D(_MainTex, uv4)*i.color; +r1.a-=0.01; +r2.a-=0.01; +r3.a-=0.01; +r4.a-=0.01; +r1.rgb-=0.195; +r2.rgb-=0.130; +r3.rgb-=0.065; +r4.rgb-=0; + + +float4 mo=r1 * (1.0 - (r2.a)); +float4 bo=r2 * r2.a; +r1=mo+bo; + +mo=r1 * (1.0 - (r3.a)); +bo=r3 * r3.a; +r1=mo+bo; + +mo=r1 * (1.0 - (r4.a)); +bo=r4 * r4.a; +r1=mo+bo; + +r1.a = r1.a*1-_Alpha; +return r1; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_GrassMultiFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_GrassMultiFX.shader.meta new file mode 100644 index 00000000..fc324584 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GrassMultiFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aac7379120a72794a94e8e9769ac8dd6 +timeCreated: 1529660452 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_GrayScale.shader b/Assets/2DxFX/Resources/_2dxFX_GrayScale.shader new file mode 100644 index 00000000..00998c1d --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GrayScale.shader @@ -0,0 +1,90 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/GrayScale" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("_Color", Color) = (1,1,1,1) +_EffectAmount ("Effect Amount", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +uniform float _EffectAmount; +sampler2D _MainTex; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float4 c = tex2D(_MainTex, i.texcoord)*i.color; +c.rgb = lerp(c.rgb, dot(c.rgb, float3(0.3, 0.59, 0.11)), _EffectAmount); +c.a = c.a-_Alpha; +return float4(c.rgb,c.a); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_GrayScale.shader.meta b/Assets/2DxFX/Resources/_2dxFX_GrayScale.shader.meta new file mode 100644 index 00000000..08850274 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_GrayScale.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 62ced1108742e2c4d99c2a6c0708300f +timeCreated: 1529660433 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_HSV.shader b/Assets/2DxFX/Resources/_2dxFX_HSV.shader new file mode 100644 index 00000000..4b4690f0 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_HSV.shader @@ -0,0 +1,124 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/HSV" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("_Color", Color) = (1,1,1,1) +_HueShift("HueShift", Range (0,360) ) = 0 + +_Sat("Saturation", Float) = 1 +_Val("Value", Float) = 1 +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _HueShift; +float _Sat; +float _Val; +float _Alpha; +float4 _Color; + +float3 shift_col(float3 RGB, float3 shift) +{ + +float3 RESULT = float3(RGB); +float a1= shift.z*shift.y; +float a2= shift.x*3.14159265/180; +float VSU = a1*cos(a2); +float VSW = a1*sin(a2); + +RESULT.x = (.299*shift.z+.701*VSU+.168*VSW)*RGB.x ++ (.587*shift.z-.587*VSU+.330*VSW)*RGB.y ++ (.114*shift.z-.114*VSU-.497*VSW)*RGB.z; + +RESULT.y = (.299*shift.z-.299*VSU-.328*VSW)*RGB.x ++ (.587*shift.z+.413*VSU+.035*VSW)*RGB.y ++ (.114*shift.z-.114*VSU+.292*VSW)*RGB.z; + +RESULT.z = (.299*shift.z-.3*VSU+1.25*VSW)*RGB.x ++ (.587*shift.z-.588*VSU-1.05*VSW)*RGB.y ++ (.114*shift.z+.886*VSU-.203*VSW)*RGB.z; + +return (RESULT); +} + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float4 c = tex2D(_MainTex, i.texcoord)*i.color; + +float3 shift = float3(_HueShift, _Sat, _Val); +c.rgb = shift_col(c, shift); +c.a = c.a-_Alpha; + +return c; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_HSV.shader.meta b/Assets/2DxFX/Resources/_2dxFX_HSV.shader.meta new file mode 100644 index 00000000..dfc0ef98 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_HSV.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a67566ebba7c8114cbabea0a3e357150 +timeCreated: 1529660450 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Heat.shader b/Assets/2DxFX/Resources/_2dxFX_Heat.shader new file mode 100644 index 00000000..aa964314 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Heat.shader @@ -0,0 +1,105 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Heat" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float _Speed; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord; +float time=_Time*8*_Speed; + +uv.x += (sin(uv.y + (time * 0.7) *25) * 0.009*_Distortion) + (sin(uv.y + time) * 0.005); +uv.y += (cos(uv.y + (time * 0.7) *25) * 0.009*_Distortion) + (cos(uv.x + time) * 0.005); + +float4 rcol=tex2D(_MainTex, uv)*i.color; +rcol.a = rcol.a*1-_Alpha; +return rcol; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Heat.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Heat.shader.meta new file mode 100644 index 00000000..61553584 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Heat.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 02312673b6ee40648a0ac2f6db9ffe28 +timeCreated: 1529660408 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Hologram.shader b/Assets/2DxFX/Resources/_2dxFX_Hologram.shader new file mode 100644 index 00000000..84091cb8 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Hologram.shader @@ -0,0 +1,172 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// +Shader "2DxFX/Standard/Hologram" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Size ("Size", Range(0,1)) = 0 +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Size; +float _Distortion; +float _Alpha; +float4 _Color; +float _TimeX; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +inline float mod(float x,float modu) { +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float noise(float2 p) +{ + _TimeX = _Time.y; +float sample = tex2D(_MainTex,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + + +inline float onOff(float a, float b, float c) +{ + _TimeX = _Time.y; + return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +inline float ramp(float y, float start, float end) +{ +float inside = step(start,y) - step(end,y); +float fact = (y-start)/(end-start)*inside; +return (1.-fact) * inside; + +} + +inline float stripes(float2 uv) +{ + _TimeX = _Time.y; + +float noi = noise(uv*float2(0.5,1.) + float2(6.,3.))*_Distortion*3; +return ramp(mod(uv.y*4. + _TimeX/2.+sin(_TimeX + sin(_TimeX*0.63)),1.),.5,.6)*noi; +} + +inline float4 getVideo(float2 uv) +{ + _TimeX = _Time.y; + float2 look = uv; +float window = 1./(1.+20.*(look.y-mod(_TimeX/4.,1.))*(look.y-mod(_TimeX/4.,1.))); +look.x = look.x + sin(look.y*30. + _TimeX)/(50.*_Distortion)*onOff(4.,4.,.3)*(1.+cos(_TimeX*80.))*window; + +float vShift = .4*onOff(2.,3.,.9)*(sin(_TimeX)*sin(_TimeX*20.) + +(0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); + +look.y = mod(look.y + vShift, 1.); + +float4 video = float4(0,0,0,0); +float4 videox=tex2D(_MainTex,look); + +video.r = tex2D(_MainTex,look-float2(.05,0.)*onOff(2.,1.5,.9)).r; +video.g = videox.g; +video.b = tex2D(_MainTex,look+float2(.05,0.)*onOff(2.,1.5,.9)).b; +video.a = videox.a; + +return video; +} + +float4 frag (v2f i) : COLOR +{ + _TimeX = _Time.y; + +float2 uv = i.texcoord.xy; +float alpha = tex2D(_MainTex,uv).a; + +float4 video = getVideo(uv)*i.color; +float vigAmt = 3.+.3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1.-vigAmt*(uv.y-.5)*(uv.y-.5))*(1.-vigAmt*(uv.x-.5)*(uv.x-.5)); + +video += stripes(uv); +video += noise(uv*2.)/2.; +video.r *= vignette; + +video *= (12.+mod(uv.y*30.+_TimeX,1.))/13.; +video.a=video.a+(frac(sin(dot(uv.xy*_TimeX,float2(12.9898,78.233))) * 43758.5453))*.5; +video.a=(video.a*.3)*alpha*vignette*2*(1-_Alpha)*i.color.a; + +return video; + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Hologram.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Hologram.shader.meta new file mode 100644 index 00000000..ff885595 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Hologram.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2a375af75347a884b99848eca6643a8f +timeCreated: 1529660420 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Hologram2.shader b/Assets/2DxFX/Resources/_2dxFX_Hologram2.shader new file mode 100644 index 00000000..c5c4ac53 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Hologram2.shader @@ -0,0 +1,168 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Hologram2" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Size ("Size", Range(0,1)) = 0 +_Distortion ("Distortion", Range(0,1)) = 0 + +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Size; +float _TimeX; +float _Distortion; + +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +inline float mod(float x,float modu) { +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float noise(float2 p) +{ +_TimeX=_Time.y; +float sample = tex2D(_MainTex,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + + +inline float onOff(float a, float b, float c) +{ +_TimeX=_Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +inline float ramp(float y, float start, float end) +{ +float inside = step(start,y) - step(end,y); +float fact = (y-start)/(end-start)*inside; +return (1.-fact) * inside; + +} + +inline float stripes(float2 uv) +{ +_TimeX=_Time.y; +float noi = noise(uv*float2(0.5,1.) + float2(6.,3.))*_Distortion*3; +return ramp(mod(uv.y*4. + _TimeX/2.+sin(_TimeX + sin(_TimeX*0.63)),1.),.5,.6)*noi; +} + +inline float4 getVideo(float2 uv) +{ +_TimeX=_Time.y; +float2 look = uv; +float window = 1./(1.+20.*(look.y-mod(_TimeX/4.,1.))*(look.y-mod(_TimeX/4.,1.))); +look.x = look.x + sin(look.y*30. + _TimeX)/(50.*_Distortion)*onOff(4.,4.,.3)*(1.+cos(_TimeX*80.))*window; + +float vShift = .4*onOff(2.,3.,.9)*(sin(_TimeX)*sin(_TimeX*20.) + +(0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); + +look.y = mod(look.y + vShift, 1.); + +float4 video; +float4 video2=tex2D(_MainTex,look); +video=video2; +float onoffx=onOff(2.,1.5,.9); +video.r = tex2D(_MainTex,look-float2(.05,0.)*onoffx).r; +video.b = tex2D(_MainTex,look+float2(.05,0.)*onoffx).b; + +return video; +} + +float4 frag (v2f i) : COLOR +{ +_TimeX=_Time.y; +float2 uv = i.texcoord.xy; +float alpha = tex2D(_MainTex,uv).a; +float4 video = getVideo(uv)*i.color; +float vigAmt = 3.+.3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1.-vigAmt*(uv.y-.5)*(uv.y-.5))*(1.-vigAmt*(uv.x-.5)*(uv.x-.5)); +video += stripes(uv); +video += noise(uv*2.)/2.; +video.r *= vignette; +video.a=video.a+(frac(sin(dot(uv.xy*_TimeX,float2(12.9898,78.233))) * 43758.5453))*.5; +video *= (12.+mod(uv.y*30.+_TimeX,1.))/13.; +video.a=(video.a*.3)*alpha*vignette*2*(1-_Alpha)*i.color.a; +return video; + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Hologram2.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Hologram2.shader.meta new file mode 100644 index 00000000..24c270cb --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Hologram2.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e4902c6983700bb45857a32e3d6365e1 +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Hologram3.shader b/Assets/2DxFX/Resources/_2dxFX_Hologram3.shader new file mode 100644 index 00000000..fc0c9c0c --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Hologram3.shader @@ -0,0 +1,184 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Hologram3" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Size ("Size", Range(0,1)) = 0 +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("_Color", Color) = (1,1,1,1) +_ColorX ("_ColorX", Color) = (1,1,1,1) +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Size; +float _Distortion; + +float _Alpha; +float4 _Color; +float4 _ColorX; +float _TimeX; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +inline float mod(float x,float modu) { +return x - floor(x * (1.0 / modu)) * modu; +} + +inline float noise(float2 p) +{ +_TimeX=_Time.y; +float sample = tex2D(_MainTex,float2(.2,0.2*cos(_TimeX))*_TimeX*8. + p*1.).x; +sample *= sample; +return sample; +} + + +inline float onOff(float a, float b, float c) +{ +_TimeX=_Time.y; +return step(c, sin(_TimeX + a*cos(_TimeX*b))); +} + +inline float ramp(float y, float start, float end) +{ +float inside = step(start,y) - step(end,y); +float fact = (y-start)/(end-start)*inside; +return (1.-fact) * inside; + +} + +inline float stripes(float2 uv) +{ +_TimeX=_Time.y; +float noi = noise(uv*float2(0.5,1.) + float2(6.,3.))*_Distortion*3; +return ramp(mod(uv.y*4. + _TimeX/2.+sin(_TimeX + sin(_TimeX*0.63)),1.),.5,.6)*noi; +} + +inline float4 getVideo(float2 uv) +{ +_TimeX=_Time.y; +float2 look = uv; +float window = 4./(1.+20.*(look.y-mod(_TimeX/1.,1.))*(look.y-mod(_TimeX/10.,1.))); +look.x = look.x + sin(look.y*30. + _TimeX)/(50.*_Distortion)*onOff(1.,4.,.3)*(1.+cos(_TimeX*80.))*window; + +float vShift = .4*onOff(2.,3.,.9)*(sin(_TimeX)*sin(_TimeX*200.) + +(0.5 + 0.1*sin(_TimeX*20.)*cos(_TimeX))); + +look.y = mod(look.y + vShift, 1.); + +float4 video = float4(0,0,0,0); + +video.r = tex2D(_MainTex,look-float2(.05,0.)*onOff(2.,1.5,.9)).r; +float4 videox=tex2D(_MainTex,look); +video.g = videox.g; +video.b = tex2D(_MainTex,look+float2(.05,0.)*onOff(2.,1.5,.9)).b; +video.a = videox.a; + +return video; +} + +inline float2 screenDistort(float2 uv) +{ +uv -= float2(.5,.5); +uv = uv*4.2*(1./4.2+2.*uv.x*uv.x*uv.y*uv.y); +uv += float2(.5,.5); +return uv; +} + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord.xy; +float alpha = tex2D(_MainTex,uv).a; + +uv = screenDistort(uv); +float4 video = getVideo(uv)*i.color; +_TimeX=_Time.y; +float vigAmt = 3.+.3*sin(_TimeX + 5.*cos(_TimeX*5.)); +float vignette = (1.-vigAmt*(uv.y-.5)*(uv.y-.5))*(1.-vigAmt*(uv.x-.5)*(uv.x-.5)); + +video += stripes(uv); +video += noise(uv*2.)/2.; +video.r *= vignette; + +video.rgb=video.r*_ColorX; + +video *= (12.+mod(uv.y*30.+_TimeX,1.))/13.; +video.a=video.a+(frac(sin(dot(uv.xy*_TimeX,float2(12.9898,78.233))) * 43758.5453))*.5; +video.a=(video.a*.4)*alpha*vignette*4*(1-_Alpha)*i.color.a; + +return video; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Hologram3.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Hologram3.shader.meta new file mode 100644 index 00000000..c6e5f277 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Hologram3.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 067c960c8cf22704395ae36e67a762c9 +timeCreated: 1529660410 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Ice.shader b/Assets/2DxFX/Resources/_2dxFX_Ice.shader new file mode 100644 index 00000000..c200a44e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Ice.shader @@ -0,0 +1,143 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Ice" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float4 frag(v2f IN) : COLOR +{ + +float speed=_Value1; +float2 uv=IN.texcoord; +uv+=float2(0,0); +uv/=8; +uv/=1.4; +uv-=float2(-0.022,-0.022); +float tm=_Time; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +float4 t2 = tex2D(_MainTex2, uv); +t2.rgb=t2.bgg; +t2.b+=0.1; + +uv=IN.texcoord; +uv/=8; +uv+=float2(-0.05,0); +tm+=0.2; +uv/=1.4; +uv-=float2(-0.022,-0.022); +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +float4 tx= tex2D(_MainTex2, uv); +tx.rgb=tx.bgg; +tx.b+=0.1; +t2 += tx; + +uv=IN.texcoord; +uv/=8; +uv+=float2(-0.025,-0.02); +tm+=0.4; +uv/=1.4; +uv-=float2(-0.022,-0.022); +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +tx= tex2D(_MainTex2, uv); +tx.rgb=tx.bgg; +tx.b+=0.1; +t2 += tx; +float4 t = tex2D(_MainTex, IN.texcoord+float2(t2.g/64,t2.g/64))*IN.color; +t2.a = t.a; +t.rgb+=t2*_Value2; + +return float4(t.rgb,t.a*(1-_Alpha)); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Ice.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Ice.shader.meta new file mode 100644 index 00000000..b9f16a99 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Ice.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d1745a2b84cf7a148a96551e82a44367 +timeCreated: 1529660460 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_IcedFX.shader b/Assets/2DxFX/Resources/_2dxFX_IcedFX.shader new file mode 100644 index 00000000..9bc15b59 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_IcedFX.shader @@ -0,0 +1,150 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/IcedFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float3 Metal(float _t) +{ + float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); + float v = (0.317398726 + 2.22806245e-5*_t + 4.20481691e-8*_t*_t) / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); + float x = 3.0 * u / (2.0 * u - 8.0 * v + 4.0); + float y = 2.0 * v / (2.0 * u - 8.0 * v + 4.0); + float z = 1.0 - x - y; + float Y = 1.0; + float X = (Y/y) * x; + float Z = (Y/y) * z; + float3 RGB = float3(Z,Y,X)/_Distortion; + RGB.y = RGB.x * pow(0.0006*_t, 2.0); + RGB.x = RGB.y * pow(0.0004*_t, 6.0); + RGB.z = RGB.z * pow(0.0004*_t, 2.0); + return RGB; +} + +inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float4 rainbow(float t) +{ + t=mod(t,1.0); + float tx = t * 6.0; + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + return float4(1.0, 1.0, 1.0,r); +} + +float4 plasma(float2 uv) +{ + float2 tuv = uv; + uv *= 2.5; + float a = 1.1 + _Time/2 *20 * 2.25; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + n += tex2D(_MainTex, tuv).r * 0.2 + tex2D(_MainTex, tuv).g * 0.4 + tex2D(_MainTex, tuv).b * 0.2; + return rainbow(n); +} + + + +float4 frag (v2f i) : COLOR +{ + float2 uv = i.texcoord.xy; + float4 noise = tex2D(_MainTex, uv); + float lum = dot(noise.rgb, float3 (0.2126, 0.7152, 0.0722)); + float maxTemp = 4000.0; + float tempScale = maxTemp; + float3 c = Metal(lum * tempScale); + float alpha = tex2D(_MainTex, i.texcoord).a; + float4 sortie=plasma(i.texcoord); + sortie.a=sortie.a*alpha-_Alpha; + sortie.r=sortie.a; + sortie.g=sortie.a; + sortie.b=sortie.a; + sortie.rgb=c.rgb+(1-sortie.a); + return float4(sortie.rgb,noise.a*1-_Alpha); + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_IcedFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_IcedFX.shader.meta new file mode 100644 index 00000000..ad92c808 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_IcedFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f29eeecd8335d824da1c733f1d292dda +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Jelly.shader b/Assets/2DxFX/Resources/_2dxFX_Jelly.shader new file mode 100644 index 00000000..e3a192a4 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Jelly.shader @@ -0,0 +1,120 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Jelly" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_RandomPos ("RandomPos", Range(0,1)) = 0 +_Inside ("Inside", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _RandomPos; +float _Inside; +float _Alpha; +float _Speed; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord; +float time=_Time*_Speed* 200+_RandomPos; +uv.x += (sin(uv.y + time) * 0.019*_Distortion); +uv.y += (cos(uv.x + time) * 0.009*_Distortion); +uv.x=lerp(uv.x,i.texcoord.x,1-i.texcoord.y); +uv.y=lerp(uv.y,i.texcoord.y,1-i.texcoord.y); +float4 rcol=tex2D(_MainTex, uv)*i.color; +uv = i.texcoord; +uv.x += (sin(uv.y + time) * 0.019*_Distortion*_Inside); +uv.y += (cos(uv.x + time) * 0.009*_Distortion*_Inside); +uv.x=lerp(uv.x,i.texcoord.x,1-i.texcoord.y); +uv.y=lerp(uv.y,i.texcoord.y,1-i.texcoord.y); +float2 scaleCenter = float2(0.5f, 0.5f); +uv = (uv - scaleCenter) * (_Inside) + scaleCenter; +float4 rcol2=(tex2D(_MainTex, uv)*i.color); +rcol.rgb=lerp(rcol.rgb,rcol.rgb/2,rcol2.a); +rcol2.rgb/=2+(1-_Inside); +rcol.rgb+=rcol2.rgb*rcol2.a; +rcol.a = rcol.a*1-_Alpha; +return rcol; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Jelly.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Jelly.shader.meta new file mode 100644 index 00000000..ebe9045b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Jelly.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ad8b56bc4cc5ab940847444fa9dd2a2d +timeCreated: 1529660453 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Lightning.shader b/Assets/2DxFX/Resources/_2dxFX_Lightning.shader new file mode 100644 index 00000000..e4cafb9a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Lightning.shader @@ -0,0 +1,129 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Lightning" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +// required for UI.Mask +_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 + + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float4 frag(v2f IN) : COLOR +{ + +float speed=_Value1; +float2 uv=IN.texcoord; +uv+=float2(0,0); +uv/=8; +float tm=_Time; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +float4 t2 = tex2D(_MainTex2, uv); + +uv=IN.texcoord; +uv/=8; +tm+=0.2; +uv/=1.0; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); + +uv=IN.texcoord; +uv/=8; +tm+=0.6+_Time; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); + +float4 t = tex2D(_MainTex, IN.texcoord)*IN.color; +t2.a = t.a; +t.rgb+=t2*_Value2; +return float4(t.rgb,t.a*(1-_Alpha)); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Lightning.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Lightning.shader.meta new file mode 100644 index 00000000..8e93e654 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Lightning.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ac0b9b6edb218f04c9b83210cc10501d +timeCreated: 1529660453 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Lightning2TXT.jpg b/Assets/2DxFX/Resources/_2dxFX_Lightning2TXT.jpg new file mode 100644 index 00000000..54a0a46c Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_Lightning2TXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_Lightning2TXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_Lightning2TXT.jpg.meta new file mode 100644 index 00000000..ccf2e028 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Lightning2TXT.jpg.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 21297ee56dfcb3744aeca141dd1a29de +timeCreated: 1529660401 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_LightningBolt.shader b/Assets/2DxFX/Resources/_2dxFX_LightningBolt.shader new file mode 100644 index 00000000..12e77a7f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_LightningBolt.shader @@ -0,0 +1,125 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/LightningBolt" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float4 frag(v2f IN) : COLOR +{ + +float speed=_Value1; +float2 uv=IN.texcoord; +uv+=float2(0,0); +uv/=8; +float tm=_Time; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +float4 t2 = tex2D(_MainTex2, uv); +uv=IN.texcoord; +uv/=8; +tm+=0.2; +uv/=1.0; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); +uv=IN.texcoord; +uv/=8; +tm+=0.6; +uv.x += floor(fmod(tm*speed, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm*speed/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv); +float4 t = tex2D(_MainTex, IN.texcoord)*IN.color; +t2.a = t.a; +t.rgb+=t2*_Value2; +return float4(t.rgb,t.a*(1-_Alpha)); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_LightningBolt.shader.meta b/Assets/2DxFX/Resources/_2dxFX_LightningBolt.shader.meta new file mode 100644 index 00000000..5b9adf89 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_LightningBolt.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ecb567a10d1dcb54188d09bd49416a12 +timeCreated: 1529660465 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_LightningTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_LightningTXT.jpg new file mode 100644 index 00000000..c8152f44 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_LightningTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_LightningTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_LightningTXT.jpg.meta new file mode 100644 index 00000000..4a286674 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_LightningTXT.jpg.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 1260d87d5f2035f429de8f538a1e73f5 +timeCreated: 1529660400 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Liquid.shader b/Assets/2DxFX/Resources/_2dxFX_Liquid.shader new file mode 100644 index 00000000..144ff1ba --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Liquid.shader @@ -0,0 +1,161 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Liquid" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +EValue ("EValue", Range (0,1)) = 1.0 +Light ("Light", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float _Speed; +float EValue; +float4 _Color; +float Light; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float col(float2 coord) +{ +float time = _Time*10; +float delta_theta = 0.897597901025655210989326680937; +float col = 0.0; +float theta = 0.0; +float _Value=_Speed; +float _Value2=_Distortion; +float _Value3=_Distortion; +float _Value4=_Distortion; + +float2 adjc = coord; +theta = delta_theta * 1; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos( (adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +theta = delta_theta * 2; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +theta = delta_theta * 3; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +theta = delta_theta * 4; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +theta = delta_theta * 5; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +theta = delta_theta * 6; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +theta = delta_theta * 7; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +theta = delta_theta * 8; +adjc.x += cos(theta)*time*_Value + time * _Value2; +adjc.y -= sin(theta)*time*_Value - time * _Value3; +col = col + cos((adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +return cos(col); +} + +float4 frag (v2f i) : COLOR +{ +float2 p = i.texcoord.xy, c1 = p, c2 = p; +float cc1 = col(c1); +c2.x += 8.53; +float dx = 0.50*(cc1-col(c2))/60; +c2.x = p.x; +c2.y += 8.53; +float dy = 0.50*(cc1-col(c2))/60; +c1.x += dx*2.; +c1.y = (c1.y+dy*2.); +float alpha = 1.+dot(dx,dy)*700*Light; +float ddx = dx - 0.012; +float ddy = dy - 0.012; +if (ddx > 0. && ddy > 0.) alpha = pow(alpha, ddx*ddy*200000); +c1=lerp(p,c1,EValue); +float4 col = tex2D(_MainTex,c1)*(alpha)*i.color; +return float4(col.rgb,col.a*(1-_Alpha)); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Liquid.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Liquid.shader.meta new file mode 100644 index 00000000..da786383 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Liquid.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 910822b3116d8c949b6aa4aab2f52a49 +timeCreated: 1529660442 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Liquify.shader b/Assets/2DxFX/Resources/_2dxFX_Liquify.shader new file mode 100644 index 00000000..c176d3eb --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Liquify.shader @@ -0,0 +1,121 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Liquify" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +EValue ("EValue", Range (0,1)) = 1.0 +Light ("Light", Range (0,1)) = 1.0 +TurnToLiquid ("TurnToLiquid", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +sampler2D _MainTex2; +float _Distortion; +float _Alpha; +float _Speed; +float EValue; +float4 _Color; +float Light; +float TurnToLiquid; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float2 p = i.texcoord.xy; +float c1=1; +float noffset=TurnToLiquid*sin(p.x*16*(TurnToLiquid+1))/2; +float _ClipUp=1-TurnToLiquid*2; +c1= saturate(((1+noffset)/(1-_ClipUp+0.04))*(1-i.texcoord.y)-noffset); +float r=1-c1+sin(p.x*_Distortion)*TurnToLiquid/3+TurnToLiquid/2; +p.y+=r; +float2 p2=i.texcoord.xy; +p2.y+=TurnToLiquid-0.5; +p2/=3; +float4 col2 = tex2D(_MainTex2,p2); +col2*=TurnToLiquid*20; +p+=float2(col2.r/16,col2.g/16); +p-=TurnToLiquid; +float4 col = tex2D(_MainTex,p)*i.color; +col.rgb+=r/2; +col.rgb+=col2.rgb/8; +float alpha=1-((0.4+p.y)*TurnToLiquid*2); +return float4(col.rgb,col.a*alpha*(1-_Alpha)); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Liquify.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Liquify.shader.meta new file mode 100644 index 00000000..972c973c --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Liquify.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b992613785dbd614fb73f2b16234f079 +timeCreated: 1529660457 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_MetalFX.shader b/Assets/2DxFX/Resources/_2dxFX_MetalFX.shader new file mode 100644 index 00000000..a0e752e1 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_MetalFX.shader @@ -0,0 +1,147 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/MetalFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float3 Metal(float _t) +{ + + float u = (0.860117757 + 1.54118254e-4*_t + 1.28641212e-7*_t*_t) / (1.0 + 8.42420235e-4*_t + 7.08145163e-7*_t*_t); + float v = (0.317398726 + 4.22806245e-5*_t + 4.20481691e-8*_t*_t) / (1.0 - 2.89741816e-5*_t + 1.61456053e-7*_t*_t); + float x = 3.0 * u / (2.0 * u - 8.0 * v + 4.0); + float y = 2.0 * v / (2.0 * u - 8.0 * v + 4.0); + float z = 1.0 - x - y; + float Y = 1.0; + float X = (Y/y) * x; + float Z = (Y/y) * z; + float3 RGB = float3(Z,Y,X)/_Distortion; + RGB.x = RGB.x * pow(0.0006*_t, 4.0); + RGB.y = RGB.y * pow(0.0004*_t, 4.0); + RGB.z = RGB.z * pow(0.0004*_t, 4.0); + return RGB; +} + +inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float4 rainbow(float t) +{ + t=mod(t,1.0); + float tx = t * 6.0; + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + return float4(1.0, 1.0, 1.0,r); +} + +float4 plasma(float2 uv) +{ + float2 tuv = uv; + uv *= 2.5; + float a = 1.1 + _Time/4 *20 * 2.25; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + n += tex2D(_MainTex, tuv).r * 0.2 + tex2D(_MainTex, tuv).g * 0.4 + tex2D(_MainTex, tuv).b * 0.2; + return rainbow(n); +} + + + +float4 frag (v2f i) : COLOR +{ + float2 uv = i.texcoord.xy; + float4 noise = tex2D(_MainTex, uv)*i.color; + float lum = dot(noise.rgb, float3 (0.4126, 0.8152, 0.1722)); + float maxTemp = 4000.0; + float tempScale = maxTemp; + float3 c = Metal(lum * tempScale); + float alpha = tex2D(_MainTex, i.texcoord).a; + float4 sortie=plasma(i.texcoord); + sortie.a=sortie.a*alpha-_Alpha; + sortie.rgb=c.rgb+(1-sortie.a); + sortie.rgb=0.1+sortie.rgb/2+dot(sortie.rgb, float3 (0.2126, 0.2152, 0.1722)); + return float4(sortie.rgb,noise.a*1-_Alpha); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_MetalFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_MetalFX.shader.meta new file mode 100644 index 00000000..29056580 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_MetalFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f657db44191bf5040a7b146bb7de1c4d +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion.shader b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion.shader new file mode 100644 index 00000000..c55086eb --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion.shader @@ -0,0 +1,116 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Mystic_Distortion" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Pitch ("Pitch", Range(0,0.5)) = 0 +_OffsetX ("OffsetX", Range(0,128)) = 0 +_OffsetY ("OffsetY", Range(0,128)) = 0 +_DistanceX ("DistanceX", Range(0,1)) = 0 +_DistanceY ("DistanceY", Range(0,1)) = 0 +_WaveTimeX ("WaveTimeX", Range(0,360)) = 0 +_WaveTimeY ("WaveTimeY", Range(0,360)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 + + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _OffsetX; +float _OffsetY; +float _Pitch; +float4 _Color; +float _DistanceX; +float _DistanceY; +float _WaveTimeX; +float _WaveTimeY; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +float2 p=IN.texcoord; +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag(v2f IN) : COLOR +{ +float2 p=IN.texcoord; +p.x= p.x+sin(p.y*_OffsetX+_WaveTimeX)*_DistanceX; +p.y= p.y+cos(p.x*_OffsetY+_WaveTimeY)*_DistanceY; +float2 m = float2(0.5, 0.5); +float2 d = p - m; +float r = sqrt(dot(d, d)); +float power = 4.44289334 * (_Pitch - 0.5); +float bind = m.y; +float2 uv=float2(0,0); +uv = m + normalize(d) * atan(r * -power * 10.0) * bind / atan(-power * bind * 10.0); +float4 mainColor = tex2D(_MainTex, uv)* IN.color; +mainColor.a-=_Alpha; +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion.shader.meta new file mode 100644 index 00000000..7c50aee5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5e77c1354c1a2fe4fafc74d7c0c821dd +timeCreated: 1529660433 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion_Additive.shader b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion_Additive.shader new file mode 100644 index 00000000..a797bb7a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion_Additive.shader @@ -0,0 +1,112 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// +Shader "2DxFX/Standard/Mystic_Distortion_Additive" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Pitch ("Pitch", Range(0,0.5)) = 0 +_OffsetX ("OffsetX", Range(0,128)) = 0 +_OffsetY ("OffsetY", Range(0,128)) = 0 +_DistanceX ("DistanceX", Range(0,1)) = 0 +_DistanceY ("DistanceY", Range(0,1)) = 0 +_WaveTimeX ("WaveTimeX", Range(0,360)) = 0 +_WaveTimeY ("WaveTimeY", Range(0,360)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off +Stencil +{ + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] +} +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 + + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _OffsetX; +float _OffsetY; +float _Pitch; +float4 _Color; +float _DistanceX; +float _DistanceY; +float _WaveTimeX; +float _WaveTimeY; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +float2 p=IN.texcoord; +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag(v2f IN) : COLOR +{ +float2 p=IN.texcoord; +p.x= p.x+sin(p.y*_OffsetX+_WaveTimeX)*_DistanceX; +p.y= p.y+cos(p.x*_OffsetY+_WaveTimeY)*_DistanceY; + +float2 m = float2(0.5, 0.5); +float2 d = p - m; +float r = sqrt(dot(d, d)); +float power = 4.44289334 * (_Pitch - 0.5); +float bind = m.y; +float2 uv=float2(0,0); +uv = m + normalize(d) * atan(r * -power * 10.0) * bind / atan(-power * bind * 10.0); +float4 mainColor = tex2D(_MainTex, uv)* IN.color; +mainColor.a-=_Alpha; +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion_Additive.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion_Additive.shader.meta new file mode 100644 index 00000000..7f984942 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Mystic_Distortion_Additive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 60fcafe28a4834b408474282bb9aea3f +timeCreated: 1529660433 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Negative.shader b/Assets/2DxFX/Resources/_2dxFX_Negative.shader new file mode 100644 index 00000000..37698834 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Negative.shader @@ -0,0 +1,95 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// +Shader "2DxFX/Standard/Negative" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + float4 r=tex2D(_MainTex, i.texcoord.xy)*i.color; + r.rgb = lerp(r.rgb,1-r.rgb,_Distortion); + r.a = r.a*1-_Alpha; + return r; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Negative.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Negative.shader.meta new file mode 100644 index 00000000..aa22a6bf --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Negative.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 24898bc6e44760d439db15e5cd60253f +timeCreated: 1529660419 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportation.shader b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation.shader new file mode 100644 index 00000000..6b60cfd0 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation.shader @@ -0,0 +1,136 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/NewTeleportation" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Distortion("_Distortion", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +[HideInInspector] TeleportationColor ("Teleportation Color", Color) = (1,1,1,1) +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Distortion; +float4 TeleportationColor; +float _HDR_Intensity; +float _Value2; +float _Fade; +float4 frag(v2f IN) : COLOR +{ +float2 uv=IN.texcoord; +float4 txt1 = tex2D(_MainTex, uv); +float talpha = txt1.a; + +float step2 = smoothstep(0.3, 1, _Fade); +float4 txt2 = tex2D(_MainTex2, uv - float2(0, step2*0.4)); +float4 txt2r = tex2D(_MainTex2, uv+float2(txt2.r*0.3,txt2.r*0.2)); +float4 rtxt = txt2.r; +rtxt.a = talpha; +float3 blue = float3(0.2+txt2r.r*0.3, 0.3 + txt2r.r*0.5, 0.6 + txt2r.r)*TeleportationColor.rgb; +float step1 = smoothstep( 0, 0.2, _Fade); +float hdr = lerp(1, _HDR_Intensity, step1); +rtxt.rgb = lerp(txt1.rgb, txt1.rgb*.25+blue, step1); +step1 = smoothstep(0.1, 0.35, _Fade); +rtxt.rgb = lerp(rtxt.rgb, blue *TeleportationColor.rgb + TeleportationColor.rgb, step1); + +step1 = smoothstep(0.35, 1.3, _Fade); + +float btw = smoothstep(step1, step1 + 0.01, txt2r.b); +float btwa = btw; + +float4 txt3 = tex2D(_MainTex2, uv - float2(txt2.r*0.05*_Distortion, _Fade*2))*8; +btwa += txt3.g*2; + +step2 = smoothstep(0.12, 1.3, _Fade); +rtxt.rgb = lerp(rtxt.rgb, float3(1.65,1.65,1.65), saturate(txt3.g*step2))*hdr; +btw = txt2.r*btw + (1 - step1 * 2); +btw *= btwa*talpha; + +step1 = smoothstep(0.1, 0.6, _Fade); +rtxt.a = lerp(rtxt.a, btw, step1); +step1 = smoothstep(0.9, 1, _Fade); +rtxt.a = lerp(rtxt.a, 0, step1); + +rtxt.a = saturate(rtxt.a)*(1-_Alpha); +return rtxt; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportation.shader.meta b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation.shader.meta new file mode 100644 index 00000000..d357970c --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 092a2ee759883704e894f9cbb69bdb5f +timeCreated: 1529660410 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2.shader b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2.shader new file mode 100644 index 00000000..bbc61e36 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2.shader @@ -0,0 +1,137 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/NewTeleportation2" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Distortion("_Distortion", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +[HideInInspector] TeleportationColor ("Teleportation Color", Color) = (1,1,1,1) +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Distortion; +float4 TeleportationColor; +float _Value2; +float _HDR_Intensity; +float _Fade; + +float4 frag(v2f IN) : COLOR +{ +float2 uv=IN.texcoord; +float4 txt1 = tex2D(_MainTex, uv); +float talpha = txt1.a; + +float step2 = smoothstep(0.3, 1, _Fade); +float4 txt2 = tex2D(_MainTex2, uv - float2(0, step2*0.4)); +float4 txt2r = tex2D(_MainTex2, uv+float2(txt2.r*0.3,txt2.r*0.2)); +float4 rtxt = txt2.r; +rtxt.a = talpha; +float3 blue = TeleportationColor.rgb; +float step1 = smoothstep( 0, 0.2, _Fade); +float hdr = lerp(1,_HDR_Intensity, step1); +rtxt.rgb = lerp(txt1.rgb, txt1.rgb+blue, step1); +step1 = smoothstep(0.1, 0.35, _Fade); +rtxt.rgb = lerp(rtxt.rgb, blue *TeleportationColor.rgb + TeleportationColor.rgb, step1); + +step1 = smoothstep(0.35, 1.3, _Fade); + +float btw = smoothstep(step1, step1 + 0.01, txt2r.b); +float btwa = btw; + +float4 txt3 = tex2D(_MainTex2, uv - float2(txt2.r*0.05*_Distortion+uv.x, _Fade))*8; +btwa += txt3.g*2; + +step2 = smoothstep(0.12, 1.3, _Fade); +rtxt.rgb = lerp(rtxt.rgb, float3(1.65, 1.65, 1.65), saturate(txt3.g*step2))*hdr; +btw = txt2.r*btw + (1 - step1 * 2); +btw *= btwa*talpha; + +step1 = smoothstep(0.1, 0.6, _Fade); +rtxt.a = lerp(rtxt.a, btw, step1); +step1 = smoothstep(0.9, 1, _Fade); +rtxt.a = lerp(rtxt.a, 0, step1); + +rtxt.a = saturate(rtxt.a)*(1-_Alpha); +return rtxt; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2.shader.meta b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2.shader.meta new file mode 100644 index 00000000..083fb80e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 81a8c4a625e2be24abb96978d8656203 +timeCreated: 1529660439 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2TXT.jpg b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2TXT.jpg new file mode 100644 index 00000000..a92f590d Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2TXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2TXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2TXT.jpg.meta new file mode 100644 index 00000000..f85a9f90 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NewTeleportation2TXT.jpg.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 736337323af22b344b976fd026e86740 +timeCreated: 1529660404 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: 2 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportationTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_NewTeleportationTXT.jpg new file mode 100644 index 00000000..32cd2c5f Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_NewTeleportationTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_NewTeleportationTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_NewTeleportationTXT.jpg.meta new file mode 100644 index 00000000..5b645f88 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NewTeleportationTXT.jpg.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 552012d14af46f84295286fcde7cb837 +timeCreated: 1529660403 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 2 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Noise.shader b/Assets/2DxFX/Resources/_2dxFX_Noise.shader new file mode 100644 index 00000000..f078ed3e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Noise.shader @@ -0,0 +1,101 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Noise" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +inline float rand(float2 co) +{ + return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); +} +float4 frag (v2f i) : COLOR +{ +float4 tex=tex2D(_MainTex, i.texcoord.xy); +float4 noise=lerp(tex,rand(i.texcoord.xy),_Distortion); +noise.a=tex.a*1-_Alpha; +return noise*i.color; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Noise.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Noise.shader.meta new file mode 100644 index 00000000..3c9293cf --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Noise.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5c6eee5d48cd80e4cbffe88fe048d6e4 +timeCreated: 1529660430 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_NoiseAnimated.shader b/Assets/2DxFX/Resources/_2dxFX_NoiseAnimated.shader new file mode 100644 index 00000000..36075a72 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NoiseAnimated.shader @@ -0,0 +1,103 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/NoiseAnimated" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +inline float rand(float2 co) +{ +return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453 *(_Time+1)); +} + +float4 frag (v2f i) : COLOR +{ +float4 tex=tex2D(_MainTex, i.texcoord.xy); +float4 noise=lerp(tex,rand(i.texcoord.xy),_Distortion); +noise.a=tex.a*1-_Alpha; +return noise*i.color; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_NoiseAnimated.shader.meta b/Assets/2DxFX/Resources/_2dxFX_NoiseAnimated.shader.meta new file mode 100644 index 00000000..fc2a3bb9 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_NoiseAnimated.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7dff9a3a3bb403f428685b7b012d739a +timeCreated: 1529660438 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Offset.shader b/Assets/2DxFX/Resources/_2dxFX_Offset.shader new file mode 100644 index 00000000..8dee9bba --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Offset.shader @@ -0,0 +1,99 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Offset" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_OffsetX ("Offset X", Range(0,1)) = 1 +_OffsetY ("Offset Y", Range(0,1)) = 1 +_ZoomX ("Zoom X", Range(0,1)) = 1 +_ZoomY ("Zoom Y", Range(0,1)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float4 _Color; +float _Size; +float _OffsetX; +float _OffsetY; +float _ZoomX; +float _ZoomY; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord + float2(_OffsetX,_OffsetY); +uv = fmod(uv * float2(_ZoomX ,_ZoomY),1); +float4 mainColor = tex2D(_MainTex, uv)*i.color; +mainColor.a = mainColor.a-_Alpha; +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Offset.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Offset.shader.meta new file mode 100644 index 00000000..0bc394d5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Offset.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0fa2c83c87d3c904ca2353c5821d892b +timeCreated: 1529660413 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Outline.shader b/Assets/2DxFX/Resources/_2dxFX_Outline.shader new file mode 100644 index 00000000..f6d46b2f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Outline.shader @@ -0,0 +1,102 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Outline" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_OutLineSpread ("Outline Spread", Range(0,0.01)) = 0.007 +_Color ("Tint", Color) = (1,1,1,1) +_ColorX ("Tint", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _OutLineSpread; +float4 _Color; +float4 _ColorX; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float4 mainColor = (tex2D(_MainTex, i.texcoord+float2(-_OutLineSpread,_OutLineSpread)) ++ tex2D(_MainTex, i.texcoord+float2(_OutLineSpread,-_OutLineSpread)) ++ tex2D(_MainTex, i.texcoord+float2(_OutLineSpread,_OutLineSpread)) ++ tex2D(_MainTex, i.texcoord-float2(_OutLineSpread,_OutLineSpread))); + +mainColor.rgb = _ColorX.rgb; + +float4 addcolor = tex2D(_MainTex, i.texcoord)*i.color; + +if (mainColor.a > 0.40) { mainColor = _ColorX; } +if (addcolor.a > 0.40) { mainColor = addcolor; mainColor.a = addcolor.a; } + +return mainColor*i.color.a; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Outline.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Outline.shader.meta new file mode 100644 index 00000000..0dc9eb63 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Outline.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: de520773f9a4021489f5eb10014b9c8f +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Pattern.shader b/Assets/2DxFX/Resources/_2dxFX_Pattern.shader new file mode 100644 index 00000000..032373ff --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pattern.shader @@ -0,0 +1,96 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Pattern" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_MainTex2 ("Pattern (RGB)", 2D) = "white" {} +_Alpha ("Alpha", Range (0,1)) = 1.0 +_OffsetX ("OffsetX", Range (0,1)) = 0 +_OffsetY ("OffsetY", Range (0,1)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _OffsetX; +float _OffsetY; + +float4 frag(v2f IN) : COLOR +{ +float4 t = tex2D(_MainTex, IN.texcoord); +float4 t2 = tex2D(_MainTex2, IN.texcoord+float2(_OffsetX,_OffsetY)) * IN.color; +t2.a = t2.a * t.a - _Alpha; +return t2; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Pattern.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Pattern.shader.meta new file mode 100644 index 00000000..763b94a9 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pattern.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e0f7af0f60c75d4984487c79237f82f +timeCreated: 1529660420 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_PatternAdditive.shader b/Assets/2DxFX/Resources/_2dxFX_PatternAdditive.shader new file mode 100644 index 00000000..6f7995ad --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PatternAdditive.shader @@ -0,0 +1,96 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/PatternAdditive" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_MainTex2 ("Pattern (RGB)", 2D) = "white" {} +_Alpha ("Alpha", Range (0,1)) = 1.0 +_OffsetX ("OffsetX", Range (0,1)) = 0 +_OffsetY ("OffsetY", Range (0,1)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha One Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _OffsetX; +float _OffsetY; + +float4 frag(v2f IN) : COLOR +{ +float4 t = tex2D(_MainTex, IN.texcoord); +float4 t2 = tex2D(_MainTex2, IN.texcoord+float2(_OffsetX,_OffsetY)) * IN.color; +t2.a = t2.a * t.a - _Alpha; +return t2; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_PatternAdditive.shader.meta b/Assets/2DxFX/Resources/_2dxFX_PatternAdditive.shader.meta new file mode 100644 index 00000000..4cd885ca --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PatternAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e2e94668dfc7e34fb9e93bb63205044 +timeCreated: 1529660420 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel.shader b/Assets/2DxFX/Resources/_2dxFX_Pixel.shader new file mode 100644 index 00000000..1e9d9e6b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel.shader @@ -0,0 +1,94 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Pixel" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Offset ("Offset", Range(4,128)) = 4 +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _Offset; +float _Alpha; +float4 _Color; + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float2 p=i.texcoord; +p= round(p * _Offset)/_Offset; +float4 mainColor = tex2D(_MainTex, p)*i.color; +float alpha2 = mainColor.a; +if (alpha2<0.95) alpha2=0; +return mainColor*alpha2*_Alpha; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Pixel.shader.meta new file mode 100644 index 00000000..62d3aaa1 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8b9ca1acc7508564886cf5668bb81198 +timeCreated: 1529660442 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsBW.shader b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsBW.shader new file mode 100644 index 00000000..47ec5efe --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsBW.shader @@ -0,0 +1,126 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Pixel8bitsBW" { +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Size ("Size", Range(0,1)) = 0 +_Offset ("Offset", Range(0,1)) = 0 +_Offset2 ("Offset2", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Size; +float _Offset; +float _Offset2; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float compare(float3 a, float3 b) +{ +float3 diff = (a - b); +return dot(diff, diff); +} + +inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float4 frag (v2f i) : COLOR +{ + +float2 q = i.texcoord; +float2 pixelSize=float2(64*_Size,64*_Size); +float2 c = floor(q * pixelSize)/pixelSize; +float4 src4 = tex2D(_MainTex, c); +float3 src = src4.rgb*_Offset2; +float alpha = src4.a; +if (alpha<0.95) alpha=0; +float3 dst0 = float3(0,0,0); +float3 dst1 = float3(0,0,0); +float best0 = 1e3; +float best1 = 1e3; +#define TCOLOR(R, G, B) { const float3 tst = float3(R, G, B); float err = compare(src, tst); if (err < best0) { best1 = best0; dst1 = dst0; best0 = err; dst0 = tst; } } +TCOLOR(0.98, 0.98, 0.98); +TCOLOR(0.03, 0.03, 0.03); +#undef TCOLOR + +best0 = sqrt(best0); best1 = sqrt(best1); +float4 FragColor = float4(mod(c.x + c.y, 2.0) > (1+best1 / (best0 + best1)) ? dst1 : dst0, 1.0); +FragColor.a=FragColor.a*alpha*(1-_Alpha); +return FragColor*i.color; + + +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsBW.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsBW.shader.meta new file mode 100644 index 00000000..f2fc2005 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsBW.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a379e5a3f287c094b986a50506cf28e4 +timeCreated: 1529660448 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsC64.shader b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsC64.shader new file mode 100644 index 00000000..383e8752 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsC64.shader @@ -0,0 +1,147 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Pixel8bitsC64" { +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Size ("Size", Range(0,1)) = 0 +_Offset ("Offset", Range(0,1)) = 0 +_Offset2 ("Offset2", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Size; +float _Offset; +float _Offset2; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float compare(float3 a, float3 b) +{ +a=a*a*a; +b=b*b*b; +float3 diff = (a - b); +return dot(diff, diff); +} + +inline float mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +float4 frag (v2f i) : COLOR +{ + +float2 q = i.texcoord; +float2 pixelSize=float2(64*_Size,64*_Size); +pixelSize.x/=3*_Offset; +float2 c = floor(q * pixelSize)/pixelSize; + +float4 src4 = tex2D(_MainTex, c)*i.color; +float3 src = src4.rgb*_Offset2; +float alpha = src4.a; +if (alpha<0.95) alpha=0; + +src*=_Offset2; + +float3 dst0 = float3(0,0,0); +float3 dst1 = float3(0,0,0); +float best0 = 1e3; +float best1 = 1e3; + +#define TCOLOR(R, G, B) { const float3 tst = float3(R, G, B); float err = compare(src, tst); if (err < best0) { best1 = best0; dst1 = dst0; best0 = err; dst0 = tst; } } +TCOLOR(0.,0.,0.); +TCOLOR(1.,1.,1.); +TCOLOR(0.62890625,0.30078125,0.26171875); +TCOLOR(0.4140625,0.75390625,0.78125); +TCOLOR(0.6328125,0.33984375,0.64453125); +TCOLOR(0.359375,0.67578125,0.37109375); +TCOLOR(0.30859375,0.265625,0.609375); +TCOLOR(0.79296875,0.8359375,0.53515625); +TCOLOR(0.63671875,0.40625,0.2265625); +TCOLOR(0.4296875,0.32421875,0.04296875); +TCOLOR(0.796875,0.49609375,0.4609375); +TCOLOR(0.38671875,0.38671875,0.38671875); +TCOLOR(0.54296875,0.54296875,0.54296875); +TCOLOR(0.60546875,0.88671875,0.61328125); +TCOLOR(0.5390625,0.49609375,0.80078125); +TCOLOR(0.68359375,0.68359375,0.68359375); +#undef TCOLOR + +best0 = sqrt(best0); best1 = sqrt(best1); +float4 FragColor = float4(mod(c.x + c.y, 2.0) > (1+best1 / (best0 + best1)) ? dst1 : dst0, 1.0); +FragColor.a=FragColor.a*alpha*(1-_Alpha); +return FragColor; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsC64.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsC64.shader.meta new file mode 100644 index 00000000..ae989c2b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsC64.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5d748954af60afd45a3b8f2caa252e55 +timeCreated: 1529660431 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsGB.shader b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsGB.shader new file mode 100644 index 00000000..169d64e6 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsGB.shader @@ -0,0 +1,131 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Pixel8bitsGB" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Size ("Size", Range(0,1)) = 0 +_Offset ("Offset", Range(0,1)) = 0 +_Offset2 ("Offset2", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float4 _Color; +float _Size; +float _Offset; +float _Offset2; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +float compare(float3 a, float3 b) +{ +a=a*a*a; +b=b*b*b; +float3 diff = (a - b); +return dot(diff, diff); +} + +inline float mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +float4 frag (v2f i) : COLOR +{ + +float2 q = i.texcoord; +float2 pixelSize=float2(64*_Size, 64*_Size); +float2 c = floor(q * pixelSize)/pixelSize; +float4 src4 = tex2D(_MainTex, c)*i.color; +float3 src = src4.rgb*_Offset2; +float alpha = src4.a; +if (alpha<0.95) alpha=0; + +float3 dst0 = float3(0,0,0); +float3 dst1 = float3(0,0,0); +float best0 = 1e3; +float best1 = 1e3; + +#define TCOLOR(R, G, B) { const float3 tst = float3(R, G, B); float err = compare(src, tst); if (err < best0) { best1 = best0; dst1 = dst0; best0 = err; dst0 = tst; } } +TCOLOR(0.68, 0.79, 0.27); +TCOLOR(0.47, 0.69, 0.42); +TCOLOR(0.13, 0.43, 0.37); +TCOLOR(0.03, 0.16, 0.33); +#undef TCOLOR + +best0 = sqrt(best0); best1 = sqrt(best1); +float4 FragColor = float4(mod(c.x + c.y, 2.0) > (1+best1 / (best0 + best1)) ? dst1 : dst0, 1.0); +FragColor.a=FragColor.a*alpha*(1-_Alpha); +return FragColor; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsGB.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsGB.shader.meta new file mode 100644 index 00000000..97ab1d62 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Pixel8bitsGB.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fd24d743c28de244ca08e960aaffaf83 +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_PixelDie.shader b/Assets/2DxFX/Resources/_2dxFX_PixelDie.shader new file mode 100644 index 00000000..2206a237 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PixelDie.shader @@ -0,0 +1,110 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/PixelDie" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + + +float4 frag(v2f IN) : COLOR +{ +float2 uv = IN.texcoord; +float4 t2 = tex2D(_MainTex2, float2(uv.x,uv.y)); +t2.rgb= smoothstep(t2.rgb, t2.rgb+0.5, _Value1*1.2); +float r= 1 - t2.r; +float4 t = tex2D(_MainTex, float2(uv.x*r,uv.y*r)); +t.a*=r; +t.b+=t2.g; +t.b+=_Value1*4; +t.rg+=(1-r)*2; + +return float4(t.rgb,t.a*(1-_Alpha)); +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_PixelDie.shader.meta b/Assets/2DxFX/Resources/_2dxFX_PixelDie.shader.meta new file mode 100644 index 00000000..c6717bc5 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PixelDie.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8690da297aa9abb4a9eebc1ae6b624a5 +timeCreated: 1529660441 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_PixelDieTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_PixelDieTXT.jpg new file mode 100644 index 00000000..09aabd6a Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_PixelDieTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_PixelDieTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_PixelDieTXT.jpg.meta new file mode 100644 index 00000000..ba8d9d17 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PixelDieTXT.jpg.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 57e31558d949d9644a1337175d41730e +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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + 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: 0, y: 0, z: 0, w: 0} + 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: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 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 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow.shader b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow.shader new file mode 100644 index 00000000..682af57d --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow.shader @@ -0,0 +1,130 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/PlasmaRainbow" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Colors ("Colors", Range(4,128)) = 4 +_Color ("Color", Color) = (1,1,1,1) +_Offset ("Offset", Range(4,128)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _Offset; +float _TimeX; +float _Alpha; +float _Colors; + + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float3 rainbow(float t) +{ + t=mod(t,1.0); + float tx = t * _Colors; + float r = clamp(tx - 4.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + float g = tx < 2.0 ? clamp(tx, 0.0, 1.0) : clamp(4.0 - tx, 0.0, 1.0); + float b = tx < 4.0 ? clamp(tx - 2.0, 0.0, 1.0) : clamp(6.0 - tx, 0.0, 1.0); + return float3(r, g, b); +} + +float3 plasma(float2 uv) +{ + _TimeX=_Time.y; + float a = 1.1 + _TimeX * 2.25+_Offset; + float b = 0.5 + _TimeX * 1.77+_Offset; + float c = 8.4 + _TimeX * 1.58+_Offset; + float d = 610 + _TimeX * 2.03+_Offset; + float x1 = 2.0 * uv.x; + float n = sin(a + x1) + sin(b - x1) + sin(c + 2.0 * uv.y) + sin(d + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + float4 nx=tex2D(_MainTex,uv); + n += nx.r * 0.2 + nx.g * 0.4 + nx.b * 0.2; + return rainbow(n); +} + + + + +float4 frag (v2f i) : COLOR +{ + float alpha = tex2D(_MainTex, i.texcoord).a; + return float4(plasma(i.texcoord), alpha-_Alpha)*i.color; + +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow.shader.meta b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow.shader.meta new file mode 100644 index 00000000..7498805c --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fca6baedd3682bd4b9325f057b361d26 +timeCreated: 1529660466 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow_Color.shader b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow_Color.shader new file mode 100644 index 00000000..8df461be --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow_Color.shader @@ -0,0 +1,133 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/PlasmaRainbow_Color" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Colors ("Colors", Range(4,128)) = 4 +_Color ("Color", Color) = (1,1,1,1) +_Offset ("Offset", Range(4,128)) = 1 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _Offset; +float _Alpha; +float _Colors; +float _TimeX; + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float3 rainbow(float t) +{ + t=mod(t,1.0); + float tx = t * _Colors; + float r = clamp(tx - 4.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + float g = tx < 2.0 ? clamp(tx, 0.0, 1.0) : clamp(4.0 - tx, 0.0, 1.0); + float b = tx < 4.0 ? clamp(tx - 2.0, 0.0, 1.0) : clamp(6.0 - tx, 0.0, 1.0); + return float3(r, g, b); +} + +float3 plasma(float2 uv) +{ + + _TimeX = _Time.y; + float a = 1.1 + _TimeX * 2.25+_Offset; + float b = 0.5 + _TimeX * 1.77+_Offset; + float c = 8.4 + _TimeX * 1.58+_Offset; + float d = 610 + _TimeX * 2.03+_Offset; + float x1=2.0*uv.x; + float n = sin(a + x1) + sin(b - x1) + sin(c + 2.0 * uv.y) + sin(d + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + float4 nx=tex2D(_MainTex,uv); + n += nx.r * 0.2 + nx.g * 0.4 + nx.b * 0.2; + return rainbow(n); +} + + + + +float4 frag (v2f i) : COLOR +{ + float4 txt= tex2D(_MainTex, i.texcoord); + float3 phasma=plasma(i.texcoord); + phasma=lerp(phasma,txt.rgb,txt.rgb*2); + phasma=phasma-txt.rgb/2; + return float4(phasma, txt.a-_Alpha)*i.color; + +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow_Color.shader.meta b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow_Color.shader.meta new file mode 100644 index 00000000..4d2735a1 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PlasmaRainbow_Color.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 374b9bfce729fc64b9cbc1f2f842f213 +timeCreated: 1529660421 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_PlasmaShield.shader b/Assets/2DxFX/Resources/_2dxFX_PlasmaShield.shader new file mode 100644 index 00000000..4ba4ff58 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PlasmaShield.shader @@ -0,0 +1,130 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/PlasmaShield" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Size ("Size", Range(4,128)) = 4 +_Color ("Tint", Color) = (1,1,1,1) +_ColorX ("Tint", Color) = (1,1,1,1) +_Offset ("Offset", Range(4,128)) = 4 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + + +} + +SubShader +{ +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +sampler2D _MainTex; +float _Offset; +float _TimeX; +float _Alpha; +float4 _Color; +float4 _ColorX; +float _Size; + + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + +inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float4 rainbow(float t) +{ + t=mod(t,1.0); + float tx = t * _Size; + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + return float4(_ColorX.r, _ColorX.g, _ColorX.b,1-r+(1.-_ColorX.a)); +} + +float4 plasma(float2 uv) +{ + _TimeX=_Time.y; + float a = 1.1 + _TimeX * 2.25+_Offset; + float x1=2.0*uv.x; + float n = sin(a + x1) + sin(a - x1) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0); + float3 nx=tex2D(_MainTex, uv); + n += nx.r * 0.2 + nx.g * 0.4 + nx.b * 0.2; + return rainbow(n); +} + + + + +float4 frag (v2f i) : COLOR +{ + float alpha = tex2D(_MainTex, i.texcoord).a; + float4 sortie=plasma(i.texcoord); + sortie.a=sortie.a*alpha-_Alpha; + return sortie*i.color; + +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_PlasmaShield.shader.meta b/Assets/2DxFX/Resources/_2dxFX_PlasmaShield.shader.meta new file mode 100644 index 00000000..dcc254ed --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_PlasmaShield.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c5d08cc9b5aa14746b4001d7c64935d2 +timeCreated: 1529660457 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Posterize.shader b/Assets/2DxFX/Resources/_2dxFX_Posterize.shader new file mode 100644 index 00000000..0510051e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Posterize.shader @@ -0,0 +1,95 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Posterize" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ + v2f OUT; + OUT.vertex = UnityObjectToClipPos(IN.vertex); + OUT.texcoord = IN.texcoord; + OUT.color = IN.color; + return OUT; +} + +float4 frag (v2f i) : COLOR +{ + float4 col = tex2D( _MainTex, i.texcoord )*i.color; + float div = 256.0/float( _Distortion ); + col = floor( col * div ) / div; + col.a = col.a*1-_Alpha; + return col; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Posterize.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Posterize.shader.meta new file mode 100644 index 00000000..b7b90792 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Posterize.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8c3447b1d11dd0f419a9b935e7175717 +timeCreated: 1529660442 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_SandFX.shader b/Assets/2DxFX/Resources/_2dxFX_SandFX.shader new file mode 100644 index 00000000..1410250f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_SandFX.shader @@ -0,0 +1,109 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/SandFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +inline float rand(float2 co){ + return frac(sin(dot(co.xy,float2(12.9898,78.233))) * 43758.5453); +} +float4 frag (v2f i) : COLOR +{ + +float4 Alpha = tex2D(_MainTex, i.texcoord+float2(sin(i.texcoord.y*125.82*_Distortion/3)/140,sin(i.texcoord.y*31.4*_Distortion/3)/40))*i.color; +float4 res=float4(0,0,0,0); +float lum=dot(Alpha.rgb, float3(.222, .707, .071)); +float noise=lerp(lum,rand(i.texcoord.xy),_Distortion/3); +if (noise>0.6) noise=0.6; +if (noise<0.3) noise=0.3; +res.rgb = noise; +res.r+=0.5; +res.g+=0.3; +res.b-=0.3; +res.rgb=lerp(Alpha.rgb,res.rgb,_Distortion); +return float4(res.rgb, Alpha.a*(1.0-_Alpha)); + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_SandFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_SandFX.shader.meta new file mode 100644 index 00000000..40b21e26 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_SandFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7e2b8f26d706907468e31eb783ffd3e9 +timeCreated: 1529660438 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Sepia.shader b/Assets/2DxFX/Resources/_2dxFX_Sepia.shader new file mode 100644 index 00000000..e410a194 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Sepia.shader @@ -0,0 +1,104 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Sepia" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ + float4 col = tex2D(_MainTex, i.texcoord.xy)*i.color; + float4 mem=col; + float3 r=dot(col.rgb, float3(.222, .707, .071)); + r.r+=0.437; + r.g+=0.171; + r.b+=0.078; + + col.a = col.a*1-_Alpha; + r=lerp(mem,r,_Distortion); + return float4(r, col.a); + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Sepia.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Sepia.shader.meta new file mode 100644 index 00000000..afc69f0e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Sepia.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3be9218ed51487a488ca7e30d3b19bec +timeCreated: 1529660422 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_ShadowTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_ShadowTXT.jpg new file mode 100644 index 00000000..7b2a4914 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_ShadowTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_ShadowTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_ShadowTXT.jpg.meta new file mode 100644 index 00000000..4641120e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_ShadowTXT.jpg.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 359a96e0e6e397c45b356aef72e49763 +timeCreated: 1529660402 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Sharpen.shader b/Assets/2DxFX/Resources/_2dxFX_Sharpen.shader new file mode 100644 index 00000000..c1eb63c0 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Sharpen.shader @@ -0,0 +1,114 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Sharpen" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Color ("_Color", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +inline float4 sharp(float2 uv) +{ + float r = 1.0/256.0; + float strength = 9.0 * _Distortion; + + float4 c0 = tex2D(_MainTex,uv); + float4 c1 = tex2D(_MainTex,uv-float2(r,.0)); + float4 c2 = tex2D(_MainTex,uv+float2(r,.0)); + float4 c3 = tex2D(_MainTex,uv-float2(.0,r)); + float4 c4 = tex2D(_MainTex,uv+float2(.0,r)); + float cx = c0+c1+c2+c3+c4; + float4 c5 = float4(cx,cx,cx,cx); c5*=0.2; + float4 mi = min(c0,c1); mi = min(mi,c2); mi = min(mi,c3); mi = min(mi,c4); + float4 ma = max(c0,c1); ma = max(ma,c2); ma = max(ma,c3); ma = max(ma,c4); + float4 rt= clamp(mi,(strength+1.0)*c0-c5*strength,ma); + return float4(rt.rgb,c0.a); +} + +float4 frag (v2f i) : COLOR +{ + float4 col= sharp(i.texcoord)*i.color; + col.a = col.a*1-_Alpha; + return col; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Sharpen.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Sharpen.shader.meta new file mode 100644 index 00000000..d36faf28 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Sharpen.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7cdc2541df7ac1b4f9a8d68a274a7476 +timeCreated: 1529660438 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Shiny_Reflect.shader b/Assets/2DxFX/Resources/_2dxFX_Shiny_Reflect.shader new file mode 100644 index 00000000..072b2a44 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Shiny_Reflect.shader @@ -0,0 +1,119 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Shiny_Reflect" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_MainTex2 ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Value2 ("Value 2", Range(0,1)) = 0 +_Value3 ("Value 3", Range(0,1)) = 0 +_Value4 ("Value 4", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +sampler2D _MainTex2; +float _Distortion; +float _Value2; +float _Value3; +float _Value4; +float _Value5; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; +return OUT; +} + + +float4 frag (v2f i) : COLOR +{ + +float4 tex = tex2D(_MainTex, i.texcoord)*i.color; +float4 tex2 = tex2D(_MainTex2, i.texcoord)*i.color; +float3 lum = float3(0.299, 0.587, 0.114); +float x=dot( tex.rgb, lum).r; +float t=tex2.r+x*_Value5; + +t=smoothstep(t,t+_Value2, _Distortion+_Value2*0.5); +t-=1-t; +t=1-abs(t); +t=abs(t); +t*=_Value3; +tex.rgb+=float3(t,t,t); +tex.a=tex.a*(1.0-_Alpha); +tex2=float4(1,1,1,t*tex.a); +tex=lerp(tex,tex2,_Value4); +return tex; + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Shiny_Reflect.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Shiny_Reflect.shader.meta new file mode 100644 index 00000000..9eae5d9b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Shiny_Reflect.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6fc94ae14d17d3642b09718b5b932fd2 +timeCreated: 1529660435 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_SkyCloud.shader b/Assets/2DxFX/Resources/_2dxFX_SkyCloud.shader new file mode 100644 index 00000000..9eb93111 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_SkyCloud.shader @@ -0,0 +1,104 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/SkyCloud" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_MainTex2 ("Pattern (RGB)", 2D) = "white" {} +_Alpha ("Alpha", Range (0,1)) = 1.0 +_OffsetX ("OffsetX", Range (0,1)) = 0 +_OffsetY ("OffsetY", Range (0,1)) = 0 +_Zoom ("Zoom", Range (0,1)) = 0 +_Intensity ("Intensity", Range (0,1)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float _Alpha; +float _OffsetX; +float _OffsetY; +float _Zoom; +float _Intensity; + +float4 frag(v2f IN) : COLOR +{ +float2 p=IN.texcoord; +float4 t = tex2D(_MainTex, p); +p*=_Zoom; +float4 t2 = tex2D(_MainTex2, p+float2(_OffsetX,_OffsetY))*IN.color; +t2.rgb = t.rgb - (t2.rgb*_Intensity); +t2.a = t2.a * t.a - _Alpha; +return t2; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_SkyCloud.shader.meta b/Assets/2DxFX/Resources/_2dxFX_SkyCloud.shader.meta new file mode 100644 index 00000000..168855b6 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_SkyCloud.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b205bb0fa342be94aac6f4e7b84a5cbb +timeCreated: 1529660454 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Slim.shader b/Assets/2DxFX/Resources/_2dxFX_Slim.shader new file mode 100644 index 00000000..8706fb41 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Slim.shader @@ -0,0 +1,126 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Slim" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +EValue ("EValue", Range (0,1)) = 1.0 +Light ("Light", Range (0,1)) = 1.0 +TurnToLiquid ("TurnToLiquid", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +sampler2D _MainTex2; +float _Distortion; +float _Alpha; +float _Speed; +float EValue; +float4 _Color; +float Light; +float TurnToLiquid; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ +float2 p = i.texcoord.xy; +float c1=1; +float noffset=TurnToLiquid*sin(p.x*16*(TurnToLiquid+1))/2; +float _ClipUp=1-TurnToLiquid*2; +float Mix=TurnToLiquid+_Distortion; +c1= saturate(((1+noffset)/(1-_ClipUp+0.04))*(1-i.texcoord.y)-noffset); +float r=1-c1; +float2 p2=i.texcoord.xy; +p2.y+=TurnToLiquid-0.2; +p2/=2/(1+Mix/8); +float4 col2 = tex2D(_MainTex2,p2); +col2*=Mix*20; +float t=1+(_Time*100); +float2 mx=float2(col2.r*0.03125,col2.r*0.03125); +p+=float2(mx.x,mx.y); +p.x-=Mix/4; +p.x+=noffset/4; +p.y-=_Distortion/2.3; +float4 col = tex2D(_MainTex,p)*i.color; +col.rgb+=r/2; +col.g+=col2.g/8; +col.rb-=col2.rb/8; +float alpha=1-((0.4+p.y)*TurnToLiquid*2); +return float4(col.rgb,col.a*alpha*(1-_Alpha)); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Slim.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Slim.shader.meta new file mode 100644 index 00000000..88bf678b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Slim.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d0a5513821ffe7e4f96b578b3f06e789 +timeCreated: 1529660460 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Smoke.shader b/Assets/2DxFX/Resources/_2dxFX_Smoke.shader new file mode 100644 index 00000000..98f14d4e --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Smoke.shader @@ -0,0 +1,129 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Smoke" +{ +Properties +{ +[HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +[HideInInspector] _Alpha ("Alpha", Range (0,1)) = 1.0 +[HideInInspector] _Color ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Color1 ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Color2 ("Tint", Color) = (1,1,1,1) +[HideInInspector] _Value1 ("_Value1", Range (0,1)) = 0 +[HideInInspector] _Value2 ("_Value2", Range (0,1)) = 0 +[HideInInspector] _Value3 ("_Value3", Range (0,1)) = 0 +[HideInInspector] _Value4 ("_Value4", Range (0,1)) = 0 +[HideInInspector] _Value5 ("_Value5", Range (0,1)) = 0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +sampler2D _MainTex; +sampler2D _MainTex2; +float4 _Color; +float4 _Color1; +float4 _Color2; +float _Alpha; +float _Value1; +float _Value2; +float _Value3; +float _Value4; +float _Value5; + +float4 frag(v2f IN) : COLOR +{ +float2 uv=IN.texcoord; +uv+=float2(-0.1,-0.1); +uv/=8; +float tm=(_Value2+0.125)*8; +uv.x += floor(fmod(tm, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm/8, 1.0)*8)/8); +float4 t2 = tex2D(_MainTex2, uv) * _Color1; +uv=IN.texcoord; +uv/=8; +uv/=1.8; +uv-=float2(-0.022,-0.022); +uv.x += floor(fmod(tm, 1.0)*8)/8; +uv.y += (1-floor(fmod(tm/8, 1.0)*8)/8); +t2 += tex2D(_MainTex2, uv)* _Color2; +float tr=dot(t2.rgb,1); + +float x=tr/32; +x = lerp(0,x,_Value2); +float4 t = tex2D(_MainTex, IN.texcoord+float2(x,-x))*IN.color; +t.rgb = lerp(t.rgb,t2.rgb,_Value2); + +float ta=tr*t.a-0.1; +t.a = lerp(t.a,ta*(1-_Value2),_Value2); + +return float4(t.rgb,t.a*(1-_Alpha)); + +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Smoke.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Smoke.shader.meta new file mode 100644 index 00000000..d7ca1c48 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Smoke.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d6993f5006eb51d4daae7085373b3c74 +timeCreated: 1529660460 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_SmokeTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_SmokeTXT.jpg new file mode 100644 index 00000000..31a26be7 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_SmokeTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_SmokeTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_SmokeTXT.jpg.meta new file mode 100644 index 00000000..32606694 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_SmokeTXT.jpg.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 9de0bd1373eb4c44fa5d5715a4106d89 +timeCreated: 1529660405 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Web + maxTextureSize: 1024 + textureFormat: 2 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_StoneFX.shader b/Assets/2DxFX/Resources/_2dxFX_StoneFX.shader new file mode 100644 index 00000000..2c3d5365 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_StoneFX.shader @@ -0,0 +1,137 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/StoneFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Deep ("Alpha", Range (0,1)) = 1.0 +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float _Deep; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +inline float mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +float4 rainbow(float t) +{ +t=mod(t,1.0); +float tx = t * 6.0; + +float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + +return float4(1.0, 1.0, 1.0,r); +} + +float4 plasma(float2 uv) +{ +float2 tuv = uv; +uv *= 15.0; +float a = 1.1 + 20 * 2.25; +float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); +n = mod(((5.0 + n) / 5.0), 1.0); +n += tex2D(_MainTex, tuv).r * 11.2 + tex2D(_MainTex, tuv).g * 8.4 + tex2D(_MainTex, tuv).b * 4.2; + +return rainbow(n*_Deep); +} + + + +float4 frag (v2f i) : COLOR +{ +float2 uv = i.texcoord.xy ; + +float4 tex = tex2D(_MainTex, i.texcoord+float2(sin(_Distortion*64)/512,0)); +float lum = (tex.r+tex.b+tex.g)/3; +float a=lum; +float rate=0.2; +float r=a*(1-rate); +r=r+(1*(rate/2)); +if (r>0.6) r=0.6; +if (r<0.2) r=0.2; +float4 sortie=plasma(i.texcoord); +sortie+=plasma(float2(i.texcoord.y,i.texcoord.x)); +float3 r2= r-(1-sortie.a)/8; +tex.rgb=lerp(tex.rgb,r2,_Distortion); +return float4(tex.rgb,tex.a*1-_Alpha); + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_StoneFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_StoneFX.shader.meta new file mode 100644 index 00000000..37c90a95 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_StoneFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d1c17264e3d769d49be2ae4f6a731ee9 +timeCreated: 1529660460 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Teleportation.shader b/Assets/2DxFX/Resources/_2dxFX_Teleportation.shader new file mode 100644 index 00000000..1af2446a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Teleportation.shader @@ -0,0 +1,148 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Teleportation" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("Tint", Color) = (1,1,1,1) +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float4 _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + +inline float rand(float2 co) +{ +return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453 *_Time); +} + +inline float mod(float x,float modu) +{ +return x - floor(x * (1.0 / modu)) * modu; +} + +float4 rainbow(float t) +{ +t=mod(t,1.0); +float tx = t * 6.0; +float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); +return float4(1.0, 1.0, 1.0,r); +} + +float4 plasma(float2 uv) +{ +float2 tuv = uv; +uv *= 1.0*_Distortion*10; +float a = 1.1 + 20 * 2.25; +float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); +n = mod(((5.0 + n) / 5.0), 1.0); +n += tex2D(_MainTex, tuv).r * 11.2 + tex2D(_MainTex, tuv).g * 8.4 + tex2D(_MainTex, tuv).b * 4.2; +return rainbow(n); +} + + +inline float added(float2 sh, float d) +{ +float2 rsh = sh * 0.70710638280; +return 0.5 + 0.25 * cos((rsh.x + rsh.y) * d) + 0.25 * cos((rsh.x - rsh.y) * d); +} + +float4 frag (v2f i) : COLOR +{ + +float threshold = _Distortion; +float rasterPattern = added(i.texcoord.xy , 2136.2812 / _Distortion ); +float4 srcPixel = tex2D(_MainTex, i.texcoord.xy); + +float avg = 0.2125 * srcPixel.r + 0.7154 * srcPixel.g + 0.0721 * srcPixel.b; +float gray = (rasterPattern * _Distortion + avg - _Distortion) / (1.0 - _Distortion); + +float4 tex=tex2D(_MainTex, i.texcoord.xy); +float4 noise=lerp(tex,rand(i.texcoord.xy),_Distortion); + +float4 sortie=plasma(i.texcoord); +noise.rgb=noise.rgb+ ((1-sortie.a)*_Distortion); + +noise.rb*=(1-_Distortion); +noise.a=(tex.a*(1-_Alpha)*(1-_Distortion)); +return noise*i.color; + + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Teleportation.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Teleportation.shader.meta new file mode 100644 index 00000000..67e5c58d --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Teleportation.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 09736881810ecd245bf1090bbaefbe22 +timeCreated: 1529660410 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Threshold.shader b/Assets/2DxFX/Resources/_2dxFX_Threshold.shader new file mode 100644 index 00000000..307afab0 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Threshold.shader @@ -0,0 +1,96 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Threshold" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("Tint", Color) = (1,1,1,1) + +// required for UI.Mask +_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 +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float _Color; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + float4 tx = tex2D(_MainTex, i.texcoord); + float l = (tx.x + tx.y + tx.z) / 3.0; + tx.rgb = smoothstep(_Distortion, _Distortion+0.0001, l); + tx.a = tx.a*1-_Alpha; + return tx*i.color; +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Threshold.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Threshold.shader.meta new file mode 100644 index 00000000..35705403 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Threshold.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7140c55542ded7f48962ea4fe9057492 +timeCreated: 1529660435 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Twist.shader b/Assets/2DxFX/Resources/_2dxFX_Twist.shader new file mode 100644 index 00000000..98f53c6b --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Twist.shader @@ -0,0 +1,129 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Twist" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_PosX ("PosX", Range(0,1)) = 0 +_PosY ("PosY", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Color ("Color", Color) = (1,1,1,1) +_ColorX ("ColorX", Color) = (1,1,1,1) + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _PosX; +float _PosY; +float4 _Color; +float4 _ColorX; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + + + +return OUT; +} + + + +float4 twist(sampler2D tex, float2 uv, float time) +{ + float radius = 0.5; + float2 center = float2(_PosX,_PosY); + float2 tc = uv - center; + float dist = length(tc); + if (dist < radius) + { + float percent = (radius - dist) / radius; + float theta = percent * percent * (2.0 * sin(time)) * 8.0; + float s = sin(theta); + float c = cos(theta); + tc = float2(dot(tc, float2(c, -s)), dot(tc, float2(s, c))); + } + tc += center; + float4 color = tex2D(tex, tc); + return color; +} + + +float4 frag (v2f i) : COLOR +{ + +float2 uv = i.texcoord; +float4 finalColor = twist(_MainTex, uv, _Distortion)*i.color; +finalColor.a*=(1-_Alpha); +return finalColor; + + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Twist.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Twist.shader.meta new file mode 100644 index 00000000..3c1b7313 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Twist.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5c0c4e3f01ac76b4aa01cd4a167ea990 +timeCreated: 1529660430 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterAndBackground.shader b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackground.shader new file mode 100644 index 00000000..66ccfe7a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackground.shader @@ -0,0 +1,158 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/WaterAndBackground" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +EValue ("EValue", Range (0,1)) = 1.0 +Light ("Light", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +GrabPass { "_GrabTexture" } + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float2 screenuv : TEXCOORD1; +float4 color : COLOR; +}; + + + +sampler2D _GrabTexture; +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float _Speed; +float EValue; +float4 _Color; +float Light; +uniform float2 _MainTex_TexelSize; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); + +float4 screenpos = ComputeGrabScreenPos(OUT.vertex); +OUT.screenuv = screenpos.xy / screenpos.w; + +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + + + +return OUT; +} + +float col(float2 coord) +{ +float time = _Time*10; +float delta_theta = 0.897597901025655210989326680937; +float col = 0.0; +float theta = 0.0; +for (int i = 0; i < 8; i++) +{ +float2 adjc = coord; +theta = delta_theta*float(i); +adjc.x += cos(theta)*time*_Speed + time * _Distortion/4; +adjc.y -= sin(theta)*time*_Speed - time * _Distortion/4; +col = col + cos( (adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +} + +return cos(col); +} + +float4 frag (v2f i) : COLOR +{ +float2 p = i.texcoord.xy; +#if UNITY_UV_STARTS_AT_TOP +if (_MainTex_TexelSize.y < 0) +p.y = 1-p.y; +#endif +p = i.screenuv.xy; + +float2 c1 = p, c2 = p; +float4 col2 = tex2D(_MainTex,i.texcoord.xy); +float colr = col2.r; +col2*=i.color; +float cc1 = col(c1); +c2.x += 8.53; +float dx = 0.50*(cc1-col(c2))/128; +c2.x = p.x; +c2.y += 8.53; +float dy = 0.50*(cc1-col(c2))/128; +c1.x += dx*2.; +c1.y = (c1.y+dy*2.); +float alpha = 1.+dot(dx,dy)*5000*Light; +float ddx = dx - 0.012; +float ddy = dy - 0.012; +if (ddx > 0. && ddy > 0.) alpha = pow(alpha, ddx*ddy*200000); +c1=lerp(p,c1,EValue*col2.a); +c1.y+=(colr/4); +c1.y-=0.04; +float4 col = tex2D(_GrabTexture,c1)*alpha; +col.rgb+=col2.rgb*i.color.rgb*2; +col.a*=col2.a; +return float4(col.rgb,col.a*(1-_Alpha)); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterAndBackground.shader.meta b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackground.shader.meta new file mode 100644 index 00000000..ce279200 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackground.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 14178bcf6367aa447af5bb07fe30f542 +timeCreated: 1529660415 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterAndBackgroundDeluxe.shader b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackgroundDeluxe.shader new file mode 100644 index 00000000..6274cb43 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackgroundDeluxe.shader @@ -0,0 +1,159 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/WaterAndBackgroundDeluxe" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +EValue ("EValue", Range (0,1)) = 1.0 +Light ("Light", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +GrabPass { "_GrabTexture" } + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float2 screenuv : TEXCOORD1; +float4 color : COLOR; +}; + + + +sampler2D _GrabTexture; +sampler2D _MainTex; +float _Distortion; +float _Alpha; +float _Speed; +float EValue; +float4 _Color; +float Light; +uniform float2 _MainTex_TexelSize; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); + +float4 screenpos = ComputeGrabScreenPos(OUT.vertex); +OUT.screenuv = screenpos.xy / screenpos.w; + +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + + + +return OUT; +} + +float col(float2 coord) +{ +float time = _Time*10; +float delta_theta = 0.897597901025655210989326680937; +float col = 0.0; +float theta = 0.0; +for (int i = 0; i < 8; i++) +{ +float2 adjc = coord; +theta = delta_theta*float(i); +adjc.x += cos(theta)*time*_Speed + time * _Distortion/4; +adjc.y -= sin(theta)*time*_Speed - time * _Distortion/4; +col = col + cos( (adjc.x*cos(theta) - adjc.y*sin(theta))*6.0); +} + +return cos(col); +} + +float4 frag (v2f i) : COLOR +{ +float2 p = i.texcoord.xy; +#if UNITY_UV_STARTS_AT_TOP +if (_MainTex_TexelSize.y < 0) +p.y = 1-p.y; +#endif +p = i.screenuv.xy; + +float2 c1 = p, c2 = p; +float4 col2 = tex2D(_MainTex,i.texcoord.xy); +float colr = col2.r; +col2*=i.color; +float cc1 = col(c1); +c2.x += 8.53; +float dx = 0.50*(cc1-col(c2))/128; +c2.x = p.x; +c2.y += 8.53; +float dy = 0.50*(cc1-col(c2))/128; +c1.x += dx*2.; +c1.y = (c1.y+dy*2.); +float alpha = 1.+dot(dx,dy)*5000*Light; +float ddx = dx - 0.012; +float ddy = dy - 0.012; +if (ddx > 0. && ddy > 0.) alpha = pow(alpha, ddx*ddy*200000); + +c1=lerp(p,c1,EValue*col2.a); +c1.y-=(colr/4)*2; +c1.y+=0.1; +float4 col = tex2D(_GrabTexture,c1)*alpha; +col.rgb+=col2.rgb*i.color.rgb*2; +col.a*=col2.a; +return float4(col.rgb,col.a*(1-_Alpha)); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterAndBackgroundDeluxe.shader.meta b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackgroundDeluxe.shader.meta new file mode 100644 index 00000000..4b4bb745 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WaterAndBackgroundDeluxe.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 65f9a3492788e6743bf744a6ec05dbbd +timeCreated: 1529660434 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_WaterTXT.jpg new file mode 100644 index 00000000..b1de5476 Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_WaterTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_WaterTXT.jpg.meta new file mode 100644 index 00000000..c72be076 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WaterTXT.jpg.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 54f3d4a5cdb363d43b126eebd67f4e20 +timeCreated: 1529660403 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Waterfall.shader b/Assets/2DxFX/Resources/_2dxFX_Waterfall.shader new file mode 100644 index 00000000..60ffa3cc --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Waterfall.shader @@ -0,0 +1,153 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Waterfall" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +[HideInInspector] _MainTex2 ("Pattern (RGB)", 2D) = "white" {} +_Color ("_Color", Color) = (1,1,1,1) +Lightcolor ("Lightcolor", Color) = (1,1,1,1) +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 +_Speed ("Speed", Range (0,1)) = 1.0 +EValue ("EValue", Range (0,1)) = 1.0 +TValue ("TValue", Range (0,1)) = 1.0 +Light ("Light", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +GrabPass { "_GrabTexture" } + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float2 screenuv : TEXCOORD1; +float4 color : COLOR; +}; + + + +sampler2D _GrabTexture; +sampler2D _MainTex; +sampler2D _MainTex2; + +float _Distortion; +float _Alpha; +float _Speed; +float EValue; +float TValue; +float4 _Color; +float4 Lightcolor; +float Light; +uniform float2 _MainTex_TexelSize; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); + +float4 screenpos = ComputeGrabScreenPos(OUT.vertex); +OUT.screenuv = screenpos.xy / screenpos.w; + +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + +float4 frag (v2f i) : COLOR +{ + +float2 p = i.texcoord.xy; +#if UNITY_UV_STARTS_AT_TOP +if (_MainTex_TexelSize.y < 0) +p.y = 1-p.y; +#endif +p = i.screenuv.xy; +float2 p2 = p; +float4 txt = tex2D(_MainTex,i.texcoord.xy); +float2 uv=i.texcoord.xy; +uv.y+=_Time*6*_Speed+txt.a*txt.r; +float txt2 = tex2D(_MainTex2,uv).r; +uv.y+=_Time*6.*_Speed+txt.a*txt.r; +txt2 += tex2D(_MainTex2,uv).g; +uv.y+=_Time*8.*_Speed+txt.a*txt.r; +txt2 += tex2D(_MainTex2,uv).b; +txt2 /=3.; +float d=txt2.r/64; +d*=_Distortion; +p-=d; +uv=i.texcoord.xy; +uv/=6; +uv.y+=_Time*4*_Speed; +uv.x+=_Time*_Speed; +txt2 += tex2D(_MainTex2,uv).r; +d=txt2/64; +p-=d; +p=lerp(p2,p,_Alpha); +float4 lc=lerp(float4(0,0,0,0),Lightcolor,Lightcolor.a); +float4 gtxt = tex2D(_GrabTexture,p)*i.color+lc; +float3 glight= float3(txt2,txt2,txt2)*Light*Lightcolor; +glight+=tex2D(_MainTex,i.texcoord.xy)*Light*Lightcolor; +glight+=(clamp(txt2,0.6,1)-0.6); +gtxt.rgb+=glight*EValue; +gtxt.rgb+=txt.r*TValue; + +return float4(gtxt.rgb,txt.a*_Alpha); +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Waterfall.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Waterfall.shader.meta new file mode 100644 index 00000000..e8cae63a --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Waterfall.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 466d7fbc11190fe4e85de9024e79d4a6 +timeCreated: 1529660424 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterfallTXT.jpg b/Assets/2DxFX/Resources/_2dxFX_WaterfallTXT.jpg new file mode 100644 index 00000000..b3dd885e Binary files /dev/null and b/Assets/2DxFX/Resources/_2dxFX_WaterfallTXT.jpg differ diff --git a/Assets/2DxFX/Resources/_2dxFX_WaterfallTXT.jpg.meta b/Assets/2DxFX/Resources/_2dxFX_WaterfallTXT.jpg.meta new file mode 100644 index 00000000..ab5d6b2f --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WaterfallTXT.jpg.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: e70cf4e89425fd7429c94551a14b2ad2 +timeCreated: 1529660407 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: 2 + aniso: 16 + mipBias: -1 + wrapMode: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 1024 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_Wave.shader b/Assets/2DxFX/Resources/_2dxFX_Wave.shader new file mode 100644 index 00000000..36f3bee7 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Wave.shader @@ -0,0 +1,106 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/Wave" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_OffsetX ("OffsetX", Range(0,128)) = 0 +_OffsetY ("OffsetY", Range(0,128)) = 0 +_DistanceX ("DistanceX", Range(0,1)) = 0 +_DistanceY ("DistanceY", Range(0,1)) = 0 +_WaveTimeX ("WaveTimeX", Range(0,360)) = 0 +_WaveTimeY ("WaveTimeY", Range(0,360)) = 0 +_Color ("Tint", Color) = (1,1,1,1) +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + + +Pass +{ +CGPROGRAM + +#pragma vertex vert +#pragma fragment frag + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _OffsetX; +float _OffsetY; +float4 _Color; +float _DistanceX; +float _DistanceY; +float _WaveTimeX; +float _WaveTimeY; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +float2 p=IN.texcoord; +p.x= p.x+sin(p.y*_OffsetX+_WaveTimeX)*_DistanceX; +p.y= p.y+cos(p.x*_OffsetY+_WaveTimeY)*_DistanceY; +OUT.texcoord = p; +OUT.color = IN.color; +return OUT; +} + + +float4 frag(v2f IN) : COLOR +{ + +float4 mainColor = tex2D(_MainTex, IN.texcoord)* IN.color; +mainColor.a-=_Alpha; +return mainColor; +} +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_Wave.shader.meta b/Assets/2DxFX/Resources/_2dxFX_Wave.shader.meta new file mode 100644 index 00000000..8edcf964 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_Wave.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a3824d7b00ea82d4cb92e05c44536ddc +timeCreated: 1529660448 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Resources/_2dxFX_WoodFX.shader b/Assets/2DxFX/Resources/_2dxFX_WoodFX.shader new file mode 100644 index 00000000..ec4e9265 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WoodFX.shader @@ -0,0 +1,141 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2017 // +/// http://vetasoft.store/2dxfx/ // +////////////////////////////////////////////// + +Shader "2DxFX/Standard/WoodFX" +{ +Properties +{ +_MainTex ("Base (RGB)", 2D) = "white" {} +_Distortion ("Distortion", Range(0,1)) = 0 +_Alpha ("Alpha", Range (0,1)) = 1.0 + +// required for UI.Mask +_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 + +} + +SubShader +{ + +Tags {"Queue"="Transparent" "IgnoreProjector"="true" "RenderType"="Transparent"} +ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Cull Off + +// required for UI.Mask +Stencil +{ +Ref [_Stencil] +Comp [_StencilComp] +Pass [_StencilOp] +ReadMask [_StencilReadMask] +WriteMask [_StencilWriteMask] +} + +Pass +{ + +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#pragma target 3.0 +#include "UnityCG.cginc" + +struct appdata_t +{ +float4 vertex : POSITION; +float4 color : COLOR; +float2 texcoord : TEXCOORD0; +}; + +struct v2f +{ +float2 texcoord : TEXCOORD0; +float4 vertex : SV_POSITION; +float4 color : COLOR; +}; + + +sampler2D _MainTex; +float _Distortion; +float _Deep; +float _Alpha; + +v2f vert(appdata_t IN) +{ +v2f OUT; +OUT.vertex = UnityObjectToClipPos(IN.vertex); +OUT.texcoord = IN.texcoord; +OUT.color = IN.color; + +return OUT; +} + + + inline float mod(float x,float modu) +{ + return x - floor(x * (1.0 / modu)) * modu; +} + +float4 rainbow(float t) +{ + t=mod(t,1.0); + float tx = t * 6.0; + + float r = clamp(tx - 2.0, 0.0, 1.0) + clamp(2.0 - tx, 0.0, 1.0); + + return float4(1.0, 1.0, 1.0,r); +} + +float4 Wood(float2 uv) +{ + float2 tuv = uv; + uv *= 10.0; + float a = 46.1f; + float n = sin(a + 2.0 * uv.x) + sin(a - 2.0 * uv.x) + sin(a + 2.0 * uv.y) + sin(a + 5.0 * uv.y); + n = mod(((5.0 + n) / 5.0), 1.0)*_Deep; + n += tex2D(_MainTex, tuv).r * 11.2 + tex2D(_MainTex, tuv).g * 8.4 + tex2D(_MainTex, tuv).b * 4.2; + return rainbow(n*_Deep); +} + + + +float4 frag (v2f i) : COLOR +{ + float2 uv = i.texcoord.xy ; + float4 tex = tex2D(_MainTex, i.texcoord+float2(sin(_Distortion*64)/512,0)); + float lum =dot(tex.rgb, float3(.22, .17, .571)); + float rate=0.3; + float r=lum*0.7; + r+=0.15; + if (r>0.6) r=0.6; + if (r<0.3) r=0.3; + + float4 sortie=Wood(i.texcoord); + sortie-=Wood(i.texcoord+float2(-0.05,0.02))/2.0; + float rrr=r-(1-sortie.a)/8; + float3 r2= float3(rrr,rrr,rrr); + float3 tex2=float3(0,0,0); + r2.r-=0.1; + r2.g-=0.35; + r2.b-=0.5; + r2+=0.35; + tex.rgb=lerp(tex.rgb,r2,_Distortion); + return float4(tex.rgb,tex.a*1-_Alpha); + +} + +ENDCG +} +} +Fallback "Sprites/Default" + +} \ No newline at end of file diff --git a/Assets/2DxFX/Resources/_2dxFX_WoodFX.shader.meta b/Assets/2DxFX/Resources/_2dxFX_WoodFX.shader.meta new file mode 100644 index 00000000..80574c22 --- /dev/null +++ b/Assets/2DxFX/Resources/_2dxFX_WoodFX.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e0715ac4cd6c97e45b837bf8cb2018f2 +timeCreated: 1529660462 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts.meta b/Assets/2DxFX/Scripts.meta new file mode 100644 index 00000000..a598562d --- /dev/null +++ b/Assets/2DxFX/Scripts.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d5e3e52cd9740564080f80857faa4592 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL.meta b/Assets/2DxFX/Scripts/2dxfx_AL.meta new file mode 100644 index 00000000..a8d1a041 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c7cc55343524c6d4d8162a0673cb1d49 +folderAsset: yes +timeCreated: 1468931914 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_4Gradients.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_4Gradients.cs new file mode 100644 index 00000000..779f46f7 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_4Gradients.cs @@ -0,0 +1,545 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/4 Gradients")] +[System.Serializable] +public class _2dxFX_AL_4Gradients : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + + private string shader = "2DxFX/AL/4Gradients"; + [HideInInspector] + public Color _Color1 = new Color(1f, 0f, 0f, 1f); + [HideInInspector] + public Color _Color2 = new Color(1f, 1f, 0f, 1f); + [HideInInspector] + public Color _Color3 = new Color(0f, 1f, 1f, 1f); + [HideInInspector] + public Color _Color4 = new Color(0f, 1f, 0f, 1f); + [Range(0, 1)] + [HideInInspector] + public float _Alpha = 1f; + + [HideInInspector] + public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + if (CanvasSpriteRenderer != null) + { + if (CanvasSpriteRenderer.sharedMaterial.shader.name == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + + + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color1", _Color1); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color2", _Color2); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color3", _Color3); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color4", _Color4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_Color1", _Color1); + CanvasImage.material.SetColor("_Color2", _Color2); + CanvasImage.material.SetColor("_Color3", _Color3); + CanvasImage.material.SetColor("_Color4", _Color4); + } + } + + } + + void OnDestroy() + { + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + } + + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_4Gradients)), CanEditMultipleObjects] +public class _2dxFX_AL_4Gradients_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + + DrawDefaultInspector(); + + _2dxFX_AL_4Gradients _2dxScript = (_2dxFX_AL_4Gradients)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript._Color1 = new Color(1, 0, 0, 1); + _2dxScript._Color2 = new Color(0, 0, 1, 1); + _2dxScript._Color3 = new Color(0, 1, 0, 1); + _2dxScript._Color4 = new Color(0, 1, 1, 1); + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-corner-1") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_Color1"), new GUIContent("Upper Left Color", icone, "Select the color from upper left")); + icone = Resources.Load("2dxfx-icon-corner-2") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color2"), new GUIContent("Upper Right Color", icone, "Select the color from upper right")); + icone = Resources.Load("2dxfx-icon-corner-3") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color3"), new GUIContent("Bottom Left Color", icone, "Select the color from Bottom left")); + icone = Resources.Load("2dxfx-icon-corner-4") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color4"), new GUIContent("Bottom Right Color", icone, "Select the color from Bottom right")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + + // PRESET FX + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField(new GUIContent("PRESET FX", "PRESET FX")); + EditorGUILayout.BeginHorizontal("Box"); + Texture2D preview = Resources.Load("2dxfx-p-4g1") as Texture2D; + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(1, 0, 0, 1); + _2dxScript._Color2 = new Color(0, 0, 1, 1); + _2dxScript._Color3 = new Color(0, 1, 0, 1); + _2dxScript._Color4 = new Color(0, 1, 1, 1); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + + preview = Resources.Load("2dxfx-p-4g2") as Texture2D; + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(0, 1, 0.7f, 0); + _2dxScript._Color2 = new Color(0, 1, 0.7f, 0); + _2dxScript._Color3 = new Color(0, 1, 0.7f, 1); + _2dxScript._Color4 = new Color(0, 1, 0.7f, 1); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + + preview = Resources.Load("2dxfx-p-4g3") as Texture2D; + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(1, 1, 0, 1); + _2dxScript._Color2 = new Color(1, 0.8f, 0, 0); + _2dxScript._Color3 = new Color(1, 0.6f, 0, 0); + _2dxScript._Color4 = new Color(1, 0.6f, 0, 0); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + + preview = Resources.Load("2dxfx-p-4g4") as Texture2D; + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(1, 0, 0, 1); + _2dxScript._Color2 = new Color(1, 0, 0, 1); + _2dxScript._Color3 = new Color(1, 0, 0, 0); + _2dxScript._Color4 = new Color(1, 0, 0, 0); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_4Gradients.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_4Gradients.cs.meta new file mode 100644 index 00000000..d0149ce9 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_4Gradients.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 62443357d0628fc4d8ae5365e5e8a980 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BlackHole.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BlackHole.cs new file mode 100644 index 00000000..ef48bc5b --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BlackHole.cs @@ -0,0 +1,489 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Black Hole")] +[System.Serializable] +public class _2dxFX_AL_BlackHole : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/BlackHole"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Color _Color = new Color(1f, 1f, 1f, 1f); + [HideInInspector] [Range(-1, 1)] public float Distortion = 1.6f; + [HideInInspector] [Range(0, 0.5f)] public float _Hole = 0; + [HideInInspector] [Range(-10, 10)] public float Speed = 4; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Hole", _Hole); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_Hole", _Hole); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetColor("_ColorX", _Color); + + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_BlackHole)), CanEditMultipleObjects] +public class _2dxFX_AL_BlackHole_Editor : Editor +{ + private SerializedObject m_object; + + + public void OnEnable() + { + m_object = new SerializedObject(targets); + } + + + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_BlackHole _2dxScript = (_2dxFX_AL_BlackHole)target; + + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion size")); + + icone = Resources.Load("2dxfx-icon-size") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Hole"), new GUIContent("Hole", icone, "Change the size of the hole")); + + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Speed", icone, "Change the speed of the hole")); + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Color", icone, "Change the color of the black hole")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BlackHole.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BlackHole.cs.meta new file mode 100644 index 00000000..0d3f7906 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BlackHole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2be3287dcc42327489cc6a788bcfc82e +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blood.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blood.cs new file mode 100644 index 00000000..560451fe --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blood.cs @@ -0,0 +1,497 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Blood")] +[System.Serializable] +public class _2dxFX_AL_Blood : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Blood"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0f, 1f)] public float TurnToBlood = 0.052f; + [HideInInspector] [Range(0.0f, 1f)] public float Blood = 1.0f; + + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + ShaderChange = 0; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Blood); + CanvasSpriteRenderer.sharedMaterial.SetFloat("TurnToLiquid", TurnToBlood); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Blood); + + CanvasImage.material.SetFloat("TurnToLiquid", TurnToBlood); + } + } + + } + + void OnDestroy() + { + + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Blood)), CanEditMultipleObjects] +public class _2dxFX_AL_Blood_Editor : Editor +{ + private SerializedObject m_object; + + + public void OnEnable() + { + m_object = new SerializedObject(targets); + } + + + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Blood _2dxScript = (_2dxFX_AL_Blood)target; + + + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TurnToBlood"), new GUIContent("Turn To Blood", icone, "Turn to Blood = 0 = normal sprite : 1 = Blood Liquified")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Blood"), new GUIContent("Blood Distortion", icone, "Change the distortion of the blood")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blood.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blood.cs.meta new file mode 100644 index 00000000..43807c28 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blood.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 65073144fdebc2446ba228ad09cbd4b5 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blur.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blur.cs new file mode 100644 index 00000000..9c12c8aa --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blur.cs @@ -0,0 +1,467 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Blur")] +[System.Serializable] +public class _2dxFX_AL_Blur : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Blur"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 10f)] public float Blur = 4.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Blur); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Blur); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Blur)), CanEditMultipleObjects] +public class _2dxFX_AL_Blur_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Blur _2dxScript = (_2dxFX_AL_Blur)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + //CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + //CanvasSpriteRenderer.sharedMaterial.SetFloat("_Hole", _Hole); + //CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + //CanvasSpriteRenderer.sharedMaterial.SetColor("_Color", _Color); + + Texture2D icone = Resources.Load("2dxfx-icon-blur") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Blur"), new GUIContent("Blur", icone, "Change the size of the blur")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blur.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blur.cs.meta new file mode 100644 index 00000000..aecd2ea8 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Blur.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c6ff0575484ec0a46aece3bec612227c +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BurningFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BurningFX.cs new file mode 100644 index 00000000..28dc22b2 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BurningFX.cs @@ -0,0 +1,461 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/BurningFX")] +[System.Serializable] +public class _2dxFX_AL_BurningFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/BurningFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 4)] public float Colors = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Colors); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Colors); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_BurningFX)), CanEditMultipleObjects] +public class _2dxFX_AL_BurningFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_BurningFX _2dxScript = (_2dxFX_AL_BurningFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Colors"), new GUIContent("Color", icone, "Change the color of the sprite")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BurningFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BurningFX.cs.meta new file mode 100644 index 00000000..3469822d --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_BurningFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fdb8a866c51b94c43be9160f5055f24f +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Cartoon.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Cartoon.cs new file mode 100644 index 00000000..fd496976 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Cartoon.cs @@ -0,0 +1,468 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Cartoon")] +[System.Serializable] +public class _2dxFX_AL_Cartoon : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Cartoon"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 6)] public float _ColorLevel = 6f; + [HideInInspector] [Range(0, 1)] public float _EdgeSize = 0.08f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorLevel", _ColorLevel); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_EdgeSize", _EdgeSize); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_ColorLevel", _ColorLevel); + CanvasImage.material.SetFloat("_EdgeSize", _EdgeSize); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Cartoon)), CanEditMultipleObjects] +public class _2dxFX_AL_Cartoon_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Cartoon _2dxScript = (_2dxFX_AL_Cartoon)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorLevel"), new GUIContent("Color Level", icone, "Change the level color of the sprite")); + icone = Resources.Load("2dxfx-icon-edge") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_EdgeSize"), new GUIContent("Edge Size", icone, "Change the size of the black lines")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Cartoon.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Cartoon.cs.meta new file mode 100644 index 00000000..f61ee62f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Cartoon.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5cd1a5fdea3fe944181da1ed77e95986 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CircleFade.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CircleFade.cs new file mode 100644 index 00000000..1238272c --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CircleFade.cs @@ -0,0 +1,474 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/CircleFade")] +[System.Serializable] +public class _2dxFX_AL_CircleFade : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/CircleFade"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-0.2f, 1f)] public float _Offset = 0.2f; + [HideInInspector] [Range(0, 1)] public int _InOut = 0; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + CanvasSpriteRenderer.sharedMaterial.SetInt("_InOut", _InOut); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Offset", _Offset); + CanvasImage.material.SetInt("_InOut", _InOut); + + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_CircleFade)), CanEditMultipleObjects] +public class _2dxFX_AL_CircleFade_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_CircleFade _2dxScript = (_2dxFX_AL_CircleFade)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-size") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Color Level", icone, "Change the level color of the sprite")); + + icone = Resources.Load("2dxfx-icon-inout") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_InOut"), new GUIContent("Switch In or Out", icone, "Hole Inside or Outside")); + + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CircleFade.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CircleFade.cs.meta new file mode 100644 index 00000000..3847b6c9 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CircleFade.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: edf92a2501dd2134badcffbf66896dfd +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Clipping.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Clipping.cs new file mode 100644 index 00000000..a081e302 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Clipping.cs @@ -0,0 +1,485 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Clipping")] +[System.Serializable] +public class _2dxFX_AL_Clipping : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Clipping"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0f, 1f)] public float _ClipLeft = 0f; + [HideInInspector] [Range(0f, 1f)] public float _ClipRight = 0f; + [HideInInspector] [Range(0f, 1f)] public float _ClipUp = 0f; + [HideInInspector] [Range(0f, 1f)] public float _ClipDown = 0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipDown", 1 - _ClipDown); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasImage.material.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasImage.material.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasImage.material.SetFloat("_ClipDown", 1 - _ClipDown); + + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Clipping)), CanEditMultipleObjects] +public class _2dxFX_AL_Clipping_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Clipping _2dxScript = (_2dxFX_AL_Clipping)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipLeft"), new GUIContent("Clipping Left", icone, "Clipping Left")); + + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipRight"), new GUIContent("Clipping Right", icone, "Clipping Right")); + + icone = Resources.Load("2dxfx-icon-clip_up") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipUp"), new GUIContent("Clipping Up", icone, "Clipping Up")); + + icone = Resources.Load("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipDown"), new GUIContent("Clipping Down", icone, "Clipping Down")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Clipping.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Clipping.cs.meta new file mode 100644 index 00000000..c3236a07 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Clipping.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 43aaad109b1bfa34ca64da1daa7d7b74 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Color.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Color.cs new file mode 100644 index 00000000..c719a905 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Color.cs @@ -0,0 +1,465 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Color")] +[System.Serializable] +public class _2dxFX_AL_Color : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Color"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _Color); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Color)), CanEditMultipleObjects] +public class _2dxFX_AL_Color_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Color _2dxScript = (_2dxFX_AL_Color)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Change into Color", icone, "To the sprite into the selected color")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Color.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Color.cs.meta new file mode 100644 index 00000000..eaf39328 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Color.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4408fbc62729f4c4b8ffaa33918d15b1 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorChange.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorChange.cs new file mode 100644 index 00000000..1b0bd345 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorChange.cs @@ -0,0 +1,486 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/ColorChange")] +[System.Serializable] +public class _2dxFX_AL_ColorChange : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + + private string shader = "2DxFX/AL/ColorChange"; + + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float _Tolerance = 1f; + [HideInInspector] [Range(0, 360)] public float _HueShift = 180f; + [HideInInspector] [Range(-2, 2)] public float _Saturation = 1f; + [HideInInspector] [Range(-2, 2)] public float _ValueBrightness = 1f; + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Tolerance", _Tolerance); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_HueShift", _HueShift); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Sat", _Saturation); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Val", _ValueBrightness); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _Color); + CanvasImage.material.SetFloat("_Tolerance", _Tolerance); + CanvasImage.material.SetFloat("_HueShift", _HueShift); + CanvasImage.material.SetFloat("_Sat", _Saturation); + CanvasImage.material.SetFloat("_Val", _ValueBrightness); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_ColorChange)), CanEditMultipleObjects] +public class _2dxFX_AL_ColorChange_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_ColorChange _2dxScript = (_2dxFX_AL_ColorChange)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_HueShift"), new GUIContent("Change Hue", icone, "Change the color from the Selected Color")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Selected Color", icone, "Pick up a color")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Tolerance"), new GUIContent("Tolerance", icone, "the tolerance of the selected color")); + icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Saturation"), new GUIContent("Color Saturation", icone, "Change the saturation")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ValueBrightness"), new GUIContent("Brighntess", icone, "Change the brightness")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorChange.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorChange.cs.meta new file mode 100644 index 00000000..d8fbdc87 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorChange.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 87fa7379a7d58c44796df31fb3002fb7 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorRGB.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorRGB.cs new file mode 100644 index 00000000..fc8f7d69 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorRGB.cs @@ -0,0 +1,476 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/ColorRGB")] +[System.Serializable] +public class _2dxFX_AL_ColorRGB : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/ColorRGB"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-1, 1)] public float _ColorR = -0.5f; + [HideInInspector] [Range(-1, 1)] public float _ColorG = 0.5f; + [HideInInspector] [Range(-1, 1)] public float _ColorB = 0.5f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorR", _ColorR); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorG", _ColorG); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorB", _ColorB); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_ColorR", _ColorR); + CanvasImage.material.SetFloat("_ColorG", _ColorG); + CanvasImage.material.SetFloat("_ColorB", _ColorB); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_ColorRGB)), CanEditMultipleObjects] +public class _2dxFX_AL_ColorRGB_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_ColorRGB _2dxScript = (_2dxFX_AL_ColorRGB)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-red") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorR"), new GUIContent("Red Property", icone, "Change the red value")); + icone = Resources.Load("2dxfx-icon-green") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorG"), new GUIContent("Green Property", icone, "Change the green value")); + icone = Resources.Load("2dxfx-icon-blue") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorB"), new GUIContent("Blue Property", icone, "Change the blue value")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorRGB.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorRGB.cs.meta new file mode 100644 index 00000000..f342b23b --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_ColorRGB.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8ad0a1db064006344a30b55350c43228 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CompressionFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CompressionFX.cs new file mode 100644 index 00000000..98da400f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CompressionFX.cs @@ -0,0 +1,465 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/CompressionFX")] +[System.Serializable] +public class _2dxFX_AL_CompressionFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/CompressionFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(1, 128)] public float Parasite = 64.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Parasite); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Parasite); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_CompressionFX)), CanEditMultipleObjects] +public class _2dxFX_AL_CompressionFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_CompressionFX _2dxScript = (_2dxFX_AL_CompressionFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Parasite"), new GUIContent("Parasite Value", icone, "Change the size of the parasite FX")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CompressionFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CompressionFX.cs.meta new file mode 100644 index 00000000..ac80bbc0 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_CompressionFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a004249def2f7a8409553b0f37ae2578 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DesintegrationFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DesintegrationFX.cs new file mode 100644 index 00000000..7fcb7f53 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DesintegrationFX.cs @@ -0,0 +1,475 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/DesintegrationFX")] +[System.Serializable] +public class _2dxFX_AL_DesintegrationFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/DesintegrationFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + [HideInInspector] [Range(0, 1)] public float Seed = 1.0f; + [HideInInspector] [Range(0, 1)] public float Desintegration = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Desintegration); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", Seed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Desintegration); + CanvasImage.material.SetColor("_ColorX", _Color); + CanvasImage.material.SetFloat("_Size", Seed); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_DesintegrationFX)), CanEditMultipleObjects] +public class _2dxFX_AL_DesintegrationFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_DesintegrationFX _2dxScript = (_2dxFX_AL_DesintegrationFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Desintegration"), new GUIContent("Desintegration Value", icone, "Change the desintragration value")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Change the Color", icone, "Change the color the sprite")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Seed"), new GUIContent("Seed", icone, "Change the random seed")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DesintegrationFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DesintegrationFX.cs.meta new file mode 100644 index 00000000..dc15ad21 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DesintegrationFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bb9914fec59757143b8111e7a89dd3be +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DestroyedFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DestroyedFX.cs new file mode 100644 index 00000000..e920f152 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DestroyedFX.cs @@ -0,0 +1,469 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/DestroyedFX")] +[System.Serializable] +public class _2dxFX_AL_DestroyedFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/DestroyedFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.001f, 1)] public float Seed = 1.0f; + [HideInInspector] [Range(0, 1)] public float Destroyed = 0.5f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Destroyed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", Seed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Destroyed); + CanvasImage.material.SetFloat("_Size", Seed); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_DestroyedFX)), CanEditMultipleObjects] +public class _2dxFX_AL_DestroyedFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_DestroyedFX _2dxScript = (_2dxFX_AL_DestroyedFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Destroyed"), new GUIContent("Destroyed Value", icone, "Change the destruction value")); + icone = Resources.Load("2dxfx-icon-seed") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Seed"), new GUIContent("Seed", icone, "Change the random seed")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DestroyedFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DestroyedFX.cs.meta new file mode 100644 index 00000000..fa710bca --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_DestroyedFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6ffdf5ac815e72945b9a9d1b820c66ff +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Distortion.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Distortion.cs new file mode 100644 index 00000000..45d89e11 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Distortion.cs @@ -0,0 +1,529 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Distortion")] +[System.Serializable] +public class _2dxFX_AL_Distortion : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Distortion"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetX = 10f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetY = 10f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceX = 0.03f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceY = 0.03f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeX = 0.16f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeY = 0.12f; + [HideInInspector] public bool AutoPlayWaveX = false; + [HideInInspector] [Range(0f, 5f)] public float AutoPlaySpeedX = 5f; + [HideInInspector] public bool AutoPlayWaveY = false; + [HideInInspector] [Range(0f, 50f)] public float AutoPlaySpeedY = 5f; + [HideInInspector] public bool AutoRandom = false; + [HideInInspector] [Range(0f, 50f)] public float AutoRandomRange = 10f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceX", _DistanceX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceY", _DistanceY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeY", _WaveTimeY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + CanvasImage.material.SetFloat("_DistanceX", _DistanceX); + CanvasImage.material.SetFloat("_DistanceY", _DistanceY); + CanvasImage.material.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasImage.material.SetFloat("_WaveTimeY", _WaveTimeY); + } + + float timerange; + if (AutoRandom) + { + timerange = (Random.Range(1, AutoRandomRange) / 5) * Time.deltaTime; + } + else + { + timerange = Time.deltaTime; + } + + if (AutoPlayWaveX) _WaveTimeX += AutoPlaySpeedX * timerange; + if (AutoPlayWaveY) _WaveTimeY += AutoPlaySpeedY * timerange; + if (_WaveTimeX > 6.28f) _WaveTimeX = 0f; + if (_WaveTimeY > 6.28f) _WaveTimeY = 0f; + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Distortion)), CanEditMultipleObjects] +public class _2dxFX_AL_Distortion_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Distortion _2dxScript = (_2dxFX_AL_Distortion)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset of X")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset of Y")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceX"), new GUIContent("Distance X", icone, "Change the distance of X")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceY"), new GUIContent("Distance Y", icone, "Change the distance of Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeX"), new GUIContent("Wave Time X", icone, "Change the time speed of the wave X")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeY"), new GUIContent("Wave Time Y", icone, "Change the time speed of the wave Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveX"), new GUIContent("Active AutoPlay Wave X", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedX"), new GUIContent("AutoPlay Speed X", icone, "Speed of the auto play X")); + } + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveY"), new GUIContent("Active AutoPlay Wave Y", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedY"), new GUIContent("AutoPlay Speed Y", icone, "Speed of the auto play Y")); + } + icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandom"), new GUIContent("Auto Random", icone, "Active the random value")); + if (_2dxScript.AutoRandom) + { + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandomRange"), new GUIContent("Auto Random Range", icone, "Change the random value")); + } + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Distortion.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Distortion.cs.meta new file mode 100644 index 00000000..1b1eebc7 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Distortion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 226cc13d321331c4f927bb0b7d0c1a34 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EdgeColor.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EdgeColor.cs new file mode 100644 index 00000000..7a3ad6d2 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EdgeColor.cs @@ -0,0 +1,475 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/EdgeColor")] +[System.Serializable] +public class _2dxFX_AL_EdgeColor : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/EdgeColor"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR +string dfname = ""; +if(CanvasSpriteRenderer != null) dfname=CanvasSpriteRenderer.sharedMaterial.shader.name; +if(CanvasImage != null) +{ +Image img = CanvasImage; +if (img.material==null) dfname="Sprites/Default"; +} +if (dfname == "Sprites/Default") +{ +ForceMaterial.shader=Shader.Find(shader); +ForceMaterial.hideFlags = HideFlags.None; +if(CanvasSpriteRenderer != null) +{ +CanvasSpriteRenderer.sharedMaterial = ForceMaterial; +} +else if(CanvasImage != null) +{ +Image img = CanvasImage; +if (img.material==null) +{ +CanvasImage.material = ForceMaterial; +} +} +} +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _Color); + } + } + + } + + void OnDestroy() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_EdgeColor)),CanEditMultipleObjects] +public class _2dxFX_AL_EdgeColor_Editor : Editor +{ +private SerializedObject m_object; + +public void OnEnable() +{ + +m_object = new SerializedObject(targets); +} + +public override void OnInspectorGUI() +{ +m_object.Update(); +DrawDefaultInspector(); + +_2dxFX_AL_EdgeColor _2dxScript = (_2dxFX_AL_EdgeColor)target; + +Texture2D icon = Resources.Load ("2dxfxinspector-al") as Texture2D; +if (icon) +{ +Rect r; +float ih=icon.height; +float iw=icon.width; +float result=ih/iw; +float w=Screen.width; +result=result*w; +r = GUILayoutUtility.GetRect(ih, result); +EditorGUI.DrawTextureTransparent(r,icon); +} + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); + + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + +if (_2dxScript.ForceMaterial == null) +{ +_2dxScript.ActiveChange = true; +} +else +{ +if(GUILayout.Button("Remove Shared Material")) +{ +_2dxScript.ForceMaterial= null; +_2dxScript.ShaderChange = 1; +_2dxScript.ActiveChange = true; +_2dxScript.CallUpdate(); +} + +EditorGUILayout.PropertyField (m_object.FindProperty ("ActiveChange"), new GUIContent ("Change Material Property", "Change The Material Property")); +} + +if (_2dxScript.ActiveChange) +{ + +EditorGUILayout.BeginVertical("Box"); + +Texture2D icone = Resources.Load ("2dxfx-icon-color") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Edge Color", icone, "Change the Edge Color")); + + +EditorGUILayout.BeginVertical("Box"); + +icone = Resources.Load ("2dxfx-icon-fade") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + +EditorGUILayout.EndVertical(); +EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); +} + +m_object.ApplyModifiedProperties(); + +} +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EdgeColor.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EdgeColor.cs.meta new file mode 100644 index 00000000..e207d623 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EdgeColor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 931bc518874628c4a84e8dfb8a26900f +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EnergyBar.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EnergyBar.cs new file mode 100644 index 00000000..95106807 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EnergyBar.cs @@ -0,0 +1,500 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/EnergyBar")] +[System.Serializable] +public class _2dxFX_AL_EnergyBar : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/EnergyBar"; + + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 1f)] public float BarProgress = 0.5f; + [HideInInspector] [Range(0.9f, 1f)] public float _Value2 = 0.975f; + [HideInInspector] [Range(0f, 0.5f)] public float _Value3 = 0.5f; + [HideInInspector] [Range(0f, 1f)] public float _Value4 = 1.0f; + [HideInInspector] [Range(0f, 1f)] public float _Value5 = 0.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if (BarProgress > 1) BarProgress = 1; + if (BarProgress < 0) BarProgress = 0; + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", BarProgress); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", 1 - _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", 1 - _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value5", _Value5); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", BarProgress); + CanvasImage.material.SetFloat("_Value2", 1 - _Value2); + CanvasImage.material.SetFloat("_Value3", 1 - _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + CanvasImage.material.SetFloat("_Value5", _Value5); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + + + + + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_EnergyBar)), CanEditMultipleObjects] +public class _2dxFX_AL_EnergyBar_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_EnergyBar _2dxScript = (_2dxFX_AL_EnergyBar)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("BarProgress"), new GUIContent("Energy Bar", icone, "Change the energy bar value from 0 to 1")); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Smooth Line", icone, "Smooth Line")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value3"), new GUIContent("Darker Value", icone, "Darker Value")); + + + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value4"), new GUIContent("Energy RED DANGER", icone, "Use the color energy red danger status, 0 = none / 1 = red")); + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value5"), new GUIContent("Transparency Dark", icone, "Fade of the transparency dark")); + + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EnergyBar.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EnergyBar.cs.meta new file mode 100644 index 00000000..ff2f2892 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_EnergyBar.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 61c53a041218cd64bb9722bce0da18e8 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Fire.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Fire.cs new file mode 100644 index 00000000..0423f377 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Fire.cs @@ -0,0 +1,522 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Fire")] +[System.Serializable] +public class _2dxFX_AL_Fire : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Fire"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(64, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Fire)), CanEditMultipleObjects] +public class _2dxFX_AL_Fire_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Fire _2dxScript = (_2dxFX_AL_Fire)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Fire Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Fire Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Fire.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Fire.cs.meta new file mode 100644 index 00000000..95aff4d6 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Fire.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: efd7865a0107ca44cad142eed1d5dbe0 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Flame.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Flame.cs new file mode 100644 index 00000000..c7c55414 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Flame.cs @@ -0,0 +1,506 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Flame")] +[System.Serializable] +public class _2dxFX_AL_Flame : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + + private string shader = "2DxFX/AL/Flame"; + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(-2f, 2f)] public float _Speed = 1f; + [HideInInspector] [Range(0f, 2f)] public float _Intensity = 1f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", _Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Intensity", _Intensity); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", _Alpha); + CanvasImage.material.SetFloat("_Intensity", _Intensity); + CanvasImage.material.SetFloat("_Speed", _Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Flame)), CanEditMultipleObjects] +public class _2dxFX_AL_Flame_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Flame _2dxScript = (_2dxFX_AL_Flame)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Speed"), new GUIContent("Speed", icone, "Change the speed of the flame")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Intensity"), new GUIContent("_Intensity", icone, "Change the speed of the flame")); + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Flame.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Flame.cs.meta new file mode 100644 index 00000000..8117bc90 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Flame.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3b48c9ec9b89f68489b0e672217ccafd +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Frozen.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Frozen.cs new file mode 100644 index 00000000..7627d8e1 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Frozen.cs @@ -0,0 +1,522 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Frozen")] +[System.Serializable] +public class _2dxFX_AL_Frozen : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Frozen"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Value1 = 0.5f; + [HideInInspector] [Range(0, 1)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Frozen)), CanEditMultipleObjects] +public class _2dxFX_AL_Frozen_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Frozen _2dxScript = (_2dxFX_AL_Frozen)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Frozen Speed", icone, "Change the Frozen speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Frozen Intensity", icone, "Change the Frozen light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Frozen.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Frozen.cs.meta new file mode 100644 index 00000000..a6f1b603 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Frozen.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6408ea18bf3e9b649ac40069663015ed +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ghost.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ghost.cs new file mode 100644 index 00000000..0dc4a422 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ghost.cs @@ -0,0 +1,489 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Ghost")] +[System.Serializable] +public class _2dxFX_AL_Ghost : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Ghost"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0f, 1f)] public float _offset = 0.4f; + [HideInInspector] [Range(0f, 1f)] public float _ClipLeft = 0.4f; + [HideInInspector] [Range(0f, 1f)] public float _ClipRight = 0.2f; + [HideInInspector] [Range(0f, 1f)] public float _ClipUp = 0.1f; + [HideInInspector] [Range(0f, 1f)] public float _ClipDown = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipDown", 1 - _ClipDown); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_offset", _offset); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasImage.material.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasImage.material.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasImage.material.SetFloat("_ClipDown", 1 - _ClipDown); + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_offset", _offset); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + } + void OnDisable() + { + + + if (gameObject.activeSelf && defaultMaterial != null) + { + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Ghost)), CanEditMultipleObjects] +public class _2dxFX_AL_Ghost_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Ghost _2dxScript = (_2dxFX_AL_Ghost)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_offset"), new GUIContent("Smoothness", icone, "Change the side smooth")); + + icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipLeft"), new GUIContent("Clip Left", icone, "Left Fade")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipRight"), new GUIContent("Clip Right", icone, "Right Fade")); + icone = Resources.Load("2dxfx-icon-clip_up") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipUp"), new GUIContent("Clip Up", icone, "Up Fade")); + icone = Resources.Load("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipDown"), new GUIContent("Clip Down", icone, "Down Fade")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ghost.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ghost.cs.meta new file mode 100644 index 00000000..5a29b98a --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ghost.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 995c3c25fa727ae40a4b5132655766d6 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldFX.cs new file mode 100644 index 00000000..ba8c8ca5 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldFX.cs @@ -0,0 +1,461 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/GoldFX")] +[System.Serializable] +public class _2dxFX_AL_GoldFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/GoldFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 4f)] public float Gold = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Gold); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Gold); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_GoldFX)), CanEditMultipleObjects] +public class _2dxFX_AL_GoldFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_GoldFX _2dxScript = (_2dxFX_AL_GoldFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Gold"), new GUIContent("Gold Value", icone, "Turn your sprite into a golden sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldFX.cs.meta new file mode 100644 index 00000000..4e052fce --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 951354d2197c57644949a25753cb94e8 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldenFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldenFX.cs new file mode 100644 index 00000000..412d1308 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldenFX.cs @@ -0,0 +1,463 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/GoldenFX")] +[System.Serializable] +public class _2dxFX_AL_GoldenFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/GoldenFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 4f)] public float Golden = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Golden); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Golden); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_GoldenFX)), CanEditMultipleObjects] +public class _2dxFX_AL_GoldenFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_GoldenFX _2dxScript = (_2dxFX_AL_GoldenFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Golden"), new GUIContent("Gold Value", icone, "Turn your sprite into a golden sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldenFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldenFX.cs.meta new file mode 100644 index 00000000..cb7588c5 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GoldenFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eaba0f798a07afc41acbd1ec1d7c75b6 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassFX.cs new file mode 100644 index 00000000..42c488b8 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassFX.cs @@ -0,0 +1,583 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/GrassFX")] +[System.Serializable] +public class _2dxFX_AL_GrassFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/GrassFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + private AnimationCurve Wind; + private float WindTime1 = 0; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + + // VS AnimationCurve To C# for Wind + // Put this code on 'Normal' or 'Awake' fonction + + Wind = new AnimationCurve(); + Wind.AddKey(0, 0); + Wind.keys[0].inTangent = 0f; + Wind.keys[0].outTangent = 0f; + + Wind.AddKey(0.1004994f, 0.06637689f); + Wind.keys[1].inTangent = 0f; + Wind.keys[1].outTangent = 0f; + + Wind.AddKey(0.2430963f, -0.06465532f); + Wind.keys[2].inTangent = -0.07599592f; + Wind.keys[2].outTangent = -0.07599592f; + + Wind.AddKey(0.3425266f, 0.02290122f); + Wind.keys[3].inTangent = 0.03580004f; + Wind.keys[3].outTangent = 0.03580004f; + + Wind.AddKey(0.4246872f, -0.02232522f); + Wind.keys[4].inTangent = -0.006025657f; + Wind.keys[4].outTangent = -0.006025657f; + + Wind.AddKey(0.5104106f, 0.1647801f); + Wind.keys[5].inTangent = 0.02981164f; + Wind.keys[5].outTangent = 0.02981164f; + + Wind.AddKey(0.6082056f, -0.04679203f); + Wind.keys[6].inTangent = -0.3176928f; + Wind.keys[6].outTangent = -0.3176928f; + + Wind.AddKey(0.7794942f, 0.2234365f); + Wind.keys[7].inTangent = 0.2063811f; + Wind.keys[7].outTangent = 0.2063811f; + + Wind.AddKey(0.8546611f, -0.003165513f); + Wind.keys[8].inTangent = 0.02264977f; + Wind.keys[8].outTangent = 0.02264977f; + + Wind.AddKey(1.022495f, -0.07358052f); + Wind.keys[9].inTangent = 2.450916f; + Wind.keys[9].outTangent = 2.450916f; + + Wind.AddKey(1.250894f, -0.1813075f); + Wind.keys[10].inTangent = 0.02214685f; + Wind.keys[10].outTangent = 0.02214685f; + + Wind.AddKey(1.369877f, -0.06861454f); + Wind.keys[11].inTangent = -1.860534f; + Wind.keys[11].outTangent = -1.860534f; + + Wind.AddKey(1.484951f, -0.1543293f); + Wind.keys[12].inTangent = 0.0602752f; + Wind.keys[12].outTangent = 0.0602752f; + + Wind.AddKey(1.583562f, 0.100938f); + Wind.keys[13].inTangent = 0.08665025f; + Wind.keys[13].outTangent = 0.08665025f; + + Wind.AddKey(1.687307f, -0.100769f); + Wind.keys[14].inTangent = 0.01110137f; + Wind.keys[14].outTangent = 0.01110137f; + + Wind.AddKey(1.797593f, 0.04921142f); + Wind.keys[15].inTangent = 3.407104f; + Wind.keys[15].outTangent = 3.407104f; + + Wind.AddKey(1.927248f, -0.1877219f); + Wind.keys[16].inTangent = -0.001117587f; + Wind.keys[16].outTangent = -0.001117587f; + + Wind.AddKey(2.067694f, 0.2742145f); + Wind.keys[17].inTangent = 4.736587f; + Wind.keys[17].outTangent = 4.736587f; + + Wind.AddKey(2.184602f, -0.06127208f); + Wind.keys[18].inTangent = -0.1308322f; + Wind.keys[18].outTangent = -0.1308322f; + + Wind.AddKey(2.305948f, 0.1891117f); + Wind.keys[19].inTangent = 0.04030764f; + Wind.keys[19].outTangent = 0.04030764f; + + Wind.AddKey(2.428946f, -0.1695723f); + Wind.keys[20].inTangent = -0.2463162f; + Wind.keys[20].outTangent = -0.2463162f; + + Wind.AddKey(2.55922f, 0.0359862f); + Wind.keys[21].inTangent = 0.3967434f; + Wind.keys[21].outTangent = 0.3967434f; + + Wind.AddKey(2.785119f, -0.08398628f); + Wind.keys[22].inTangent = -0.2388284f; + Wind.keys[22].outTangent = -0.2388284f; + + Wind.AddKey(3f, 0f); + Wind.keys[23].inTangent = 0f; + Wind.keys[23].outTangent = 0f; + + Wind.postWrapMode = WrapMode.Loop; + Wind.preWrapMode = WrapMode.Loop; + + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + WindTime1 += (Time.deltaTime / 8) * Speed; + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasImage.material.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + CanvasImage.material.SetFloat("_Speed", Speed); + WindTime1 += (Time.deltaTime / 8) * Speed; + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + WindTime1 = 0; + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_GrassFX)), CanEditMultipleObjects] +public class _2dxFX_AL_GrassFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_GrassFX _2dxScript = (_2dxFX_AL_GrassFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Heat Distortion", icone, "Change the distortion of the heat")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassFX.cs.meta new file mode 100644 index 00000000..edf7c970 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 896a019fc5992134bbd846e384e5ee17 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassMultiFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassMultiFX.cs new file mode 100644 index 00000000..31000c19 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassMultiFX.cs @@ -0,0 +1,597 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/GrassMultiFX")] +[System.Serializable] +public class _2dxFX_AL_GrassMultiFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/GrassMultiFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + private AnimationCurve Wind; + private float WindTime1 = 0; + private float WindTime2 = 0.015f; + private float WindTime3 = 0.030f; + private float WindTime4 = 0.045f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + + + ShaderChange = 0; + + // VS AnimationCurve To C# for Wind + // Put this code on 'Normal' or 'Awake' fonction + + Wind = new AnimationCurve(); + Wind.AddKey(0, 0); + Wind.keys[0].inTangent = 0f; + Wind.keys[0].outTangent = 0f; + + Wind.AddKey(0.1004994f, 0.06637689f); + Wind.keys[1].inTangent = 0f; + Wind.keys[1].outTangent = 0f; + + Wind.AddKey(0.2430963f, -0.06465532f); + Wind.keys[2].inTangent = -0.07599592f; + Wind.keys[2].outTangent = -0.07599592f; + + Wind.AddKey(0.3425266f, 0.02290122f); + Wind.keys[3].inTangent = 0.03580004f; + Wind.keys[3].outTangent = 0.03580004f; + + Wind.AddKey(0.4246872f, -0.02232522f); + Wind.keys[4].inTangent = -0.006025657f; + Wind.keys[4].outTangent = -0.006025657f; + + Wind.AddKey(0.5104106f, 0.1647801f); + Wind.keys[5].inTangent = 0.02981164f; + Wind.keys[5].outTangent = 0.02981164f; + + Wind.AddKey(0.6082056f, -0.04679203f); + Wind.keys[6].inTangent = -0.3176928f; + Wind.keys[6].outTangent = -0.3176928f; + + Wind.AddKey(0.7794942f, 0.2234365f); + Wind.keys[7].inTangent = 0.2063811f; + Wind.keys[7].outTangent = 0.2063811f; + + Wind.AddKey(0.8546611f, -0.003165513f); + Wind.keys[8].inTangent = 0.02264977f; + Wind.keys[8].outTangent = 0.02264977f; + + Wind.AddKey(1.022495f, -0.07358052f); + Wind.keys[9].inTangent = 2.450916f; + Wind.keys[9].outTangent = 2.450916f; + + Wind.AddKey(1.250894f, -0.1813075f); + Wind.keys[10].inTangent = 0.02214685f; + Wind.keys[10].outTangent = 0.02214685f; + + Wind.AddKey(1.369877f, -0.06861454f); + Wind.keys[11].inTangent = -1.860534f; + Wind.keys[11].outTangent = -1.860534f; + + Wind.AddKey(1.484951f, -0.1543293f); + Wind.keys[12].inTangent = 0.0602752f; + Wind.keys[12].outTangent = 0.0602752f; + + Wind.AddKey(1.583562f, 0.100938f); + Wind.keys[13].inTangent = 0.08665025f; + Wind.keys[13].outTangent = 0.08665025f; + + Wind.AddKey(1.687307f, -0.100769f); + Wind.keys[14].inTangent = 0.01110137f; + Wind.keys[14].outTangent = 0.01110137f; + + Wind.AddKey(1.797593f, 0.04921142f); + Wind.keys[15].inTangent = 3.407104f; + Wind.keys[15].outTangent = 3.407104f; + + Wind.AddKey(1.927248f, -0.1877219f); + Wind.keys[16].inTangent = -0.001117587f; + Wind.keys[16].outTangent = -0.001117587f; + + Wind.AddKey(2.067694f, 0.2742145f); + Wind.keys[17].inTangent = 4.736587f; + Wind.keys[17].outTangent = 4.736587f; + + Wind.AddKey(2.184602f, -0.06127208f); + Wind.keys[18].inTangent = -0.1308322f; + Wind.keys[18].outTangent = -0.1308322f; + + Wind.AddKey(2.305948f, 0.1891117f); + Wind.keys[19].inTangent = 0.04030764f; + Wind.keys[19].outTangent = 0.04030764f; + + Wind.AddKey(2.428946f, -0.1695723f); + Wind.keys[20].inTangent = -0.2463162f; + Wind.keys[20].outTangent = -0.2463162f; + + Wind.AddKey(2.55922f, 0.0359862f); + Wind.keys[21].inTangent = 0.3967434f; + Wind.keys[21].outTangent = 0.3967434f; + + Wind.AddKey(2.785119f, -0.08398628f); + Wind.keys[22].inTangent = -0.2388284f; + Wind.keys[22].outTangent = -0.2388284f; + + Wind.AddKey(3f, 0f); + Wind.keys[23].inTangent = 0f; + Wind.keys[23].outTangent = 0f; + + Wind.postWrapMode = WrapMode.Loop; + Wind.preWrapMode = WrapMode.Loop; + + + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind2", Wind.Evaluate(WindTime2)); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind3", Wind.Evaluate(WindTime3)); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind4", Wind.Evaluate(WindTime4)); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasImage.material.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + if (Wind != null) CanvasImage.material.SetFloat("_Wind2", Wind.Evaluate(WindTime2)); + if (Wind != null) CanvasImage.material.SetFloat("_Wind3", Wind.Evaluate(WindTime3)); + if (Wind != null) CanvasImage.material.SetFloat("_Wind4", Wind.Evaluate(WindTime4)); + CanvasImage.material.SetFloat("_Speed", Speed); + } + WindTime1 += (Time.deltaTime / 8) * Speed; + WindTime2 += (Time.deltaTime / 8) * Speed; + WindTime3 += (Time.deltaTime / 8) * Speed; + WindTime4 += (Time.deltaTime / 8) * Speed; + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + WindTime1 = 0; + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_GrassMultiFX)), CanEditMultipleObjects] +public class _2dxFX_AL_GrassMultiFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_GrassMultiFX _2dxScript = (_2dxFX_AL_GrassMultiFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Heat Distortion", icone, "Change the distortion of the heat")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassMultiFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassMultiFX.cs.meta new file mode 100644 index 00000000..c0377804 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrassMultiFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 25d3102168cf0034b8bf297e08f7f10d +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrayScale.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrayScale.cs new file mode 100644 index 00000000..92e623bf --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrayScale.cs @@ -0,0 +1,463 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/GrayScale")] +[System.Serializable] +public class _2dxFX_AL_GrayScale : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/GrayScale"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [Range(0, 1)] public float _EffectAmount = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_EffectAmount", _EffectAmount); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_EffectAmount", _EffectAmount); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_GrayScale)), CanEditMultipleObjects] +public class _2dxFX_AL_GrayScale_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_GrayScale _2dxScript = (_2dxFX_AL_GrayScale)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_EffectAmount"), new GUIContent("Turn into GrayScale", icone, "Turn into GrayScale")); + + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrayScale.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrayScale.cs.meta new file mode 100644 index 00000000..c7138141 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_GrayScale.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 794e024e7d9342f49862db3d784bd7ce +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_HSV.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_HSV.cs new file mode 100644 index 00000000..8e15fc90 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_HSV.cs @@ -0,0 +1,475 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/HSV")] +[System.Serializable] +public class _2dxFX_AL_HSV : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/HSV"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 360)] public float _HueShift = 180f; + [HideInInspector] [Range(-2, 2)] public float _Saturation = 1f; + [HideInInspector] [Range(-2, 2)] public float _ValueBrightness = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_HueShift", _HueShift); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Sat", _Saturation); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Val", _ValueBrightness); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_HueShift", _HueShift); + CanvasImage.material.SetFloat("_Sat", _Saturation); + CanvasImage.material.SetFloat("_Val", _ValueBrightness); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_HSV)), CanEditMultipleObjects] +public class _2dxFX_AL_HSV_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_HSV _2dxScript = (_2dxFX_AL_HSV)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_HueShift"), new GUIContent("Hue Shift", icone, "Change hue colors")); + icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Saturation"), new GUIContent("Color Saturation", icone, "Change the saturation")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ValueBrightness"), new GUIContent("Brighntess", icone, "Change the brightness")); + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_HSV.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_HSV.cs.meta new file mode 100644 index 00000000..40e347e0 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_HSV.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: be94bd8bf74228946b2cfb7e50f8cd2d +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Heat.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Heat.cs new file mode 100644 index 00000000..0b3d688d --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Heat.cs @@ -0,0 +1,470 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Heat")] +[System.Serializable] +public class _2dxFX_AL_Heat : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Heat"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Heat)), CanEditMultipleObjects] +public class _2dxFX_AL_Heat_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Heat _2dxScript = (_2dxFX_AL_Heat)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Heat Distortion", icone, "Change the distortion of the heat")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Heat.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Heat.cs.meta new file mode 100644 index 00000000..7fd87d75 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Heat.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 15f87836d37e521468d4783983b21cf9 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram.cs new file mode 100644 index 00000000..89b63607 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram.cs @@ -0,0 +1,485 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Hologram")] +[System.Serializable] +public class _2dxFX_AL_Hologram : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Hologram"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 4)] public float Distortion = 1.0f; + [HideInInspector] private float _TimeX = 0;[Range(0, 3)] + [HideInInspector] public float Speed = 1; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR +string dfname = ""; +if(CanvasSpriteRenderer != null) dfname=CanvasSpriteRenderer.sharedMaterial.shader.name; +if(CanvasImage != null) +{ +Image img = CanvasImage; +if (img.material==null) dfname="Sprites/Default"; +} +if (dfname == "Sprites/Default") +{ +ForceMaterial.shader=Shader.Find(shader); +ForceMaterial.hideFlags = HideFlags.None; +if(CanvasSpriteRenderer != null) +{ +CanvasSpriteRenderer.sharedMaterial = ForceMaterial; +} +else if(CanvasImage != null) +{ +Image img = CanvasImage; +if (img.material==null) +{ +CanvasImage.material = ForceMaterial; +} +} +} +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", 1f + _TimeX); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_TimeX", 1f + _TimeX); + } + + } + + } + + void OnDestroy() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Hologram)),CanEditMultipleObjects] +public class _2dxFX_AL_Hologram_Editor : Editor +{ +private SerializedObject m_object; + +public void OnEnable() +{ + +m_object = new SerializedObject(targets); +} + +public override void OnInspectorGUI() +{ +m_object.Update(); +DrawDefaultInspector(); + +_2dxFX_AL_Hologram _2dxScript = (_2dxFX_AL_Hologram)target; + +Texture2D icon = Resources.Load ("2dxfxinspector-al") as Texture2D; +if (icon) +{ +Rect r; +float ih=icon.height; +float iw=icon.width; +float result=ih/iw; +float w=Screen.width; +result=result*w; +r = GUILayoutUtility.GetRect(ih, result); +EditorGUI.DrawTextureTransparent(r,icon); +} + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + +EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + +if (_2dxScript.ForceMaterial == null) +{ +_2dxScript.ActiveChange = true; +} +else +{ +if(GUILayout.Button("Remove Shared Material")) +{ +_2dxScript.ForceMaterial= null; +_2dxScript.ShaderChange = 1; +_2dxScript.ActiveChange = true; +_2dxScript.CallUpdate(); +} + +EditorGUILayout.PropertyField (m_object.FindProperty ("ActiveChange"), new GUIContent ("Change Material Property", "Change The Material Property")); +} + +if (_2dxScript.ActiveChange) +{ + +EditorGUILayout.BeginVertical("Box"); + +Texture2D icone = Resources.Load ("2dxfx-icon-time") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); +icone = Resources.Load ("2dxfx-icon-distortion") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion")); + +EditorGUILayout.BeginVertical("Box"); + + + +icone = Resources.Load ("2dxfx-icon-fade") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + +EditorGUILayout.EndVertical(); +EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); +} + +m_object.ApplyModifiedProperties(); + +} +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram.cs.meta new file mode 100644 index 00000000..52a03265 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8ec946b64f812364ca84c226b3a01349 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram2.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram2.cs new file mode 100644 index 00000000..fdbc5f5f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram2.cs @@ -0,0 +1,476 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Hologram2")] +[System.Serializable] +public class _2dxFX_AL_Hologram2 : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Hologram2"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 4)] public float Distortion = 1.0f; + [HideInInspector] private float _TimeX = 0;[Range(0, 3)] + [HideInInspector] public float Speed = 1; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", 1f + _TimeX); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_TimeX", 1f + _TimeX); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Hologram2)), CanEditMultipleObjects] +public class _2dxFX_AL_Hologram2_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Hologram2 _2dxScript = (_2dxFX_AL_Hologram2)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram2.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram2.cs.meta new file mode 100644 index 00000000..89c09128 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram2.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7d6f5375c3f791b40b5c1ee729570720 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram3.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram3.cs new file mode 100644 index 00000000..648c150c --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram3.cs @@ -0,0 +1,491 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Hologram3")] +[System.Serializable] +public class _2dxFX_AL_Hologram3 : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Hologram3"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 4)] public float Distortion = 1.0f; + [HideInInspector] private float _TimeX = 0;[Range(0, 3)] + [HideInInspector] public float Speed = 1; + [HideInInspector] public Color _ColorX = new Color(1, 1, 1, 1); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR +string dfname = ""; +if(CanvasSpriteRenderer != null) dfname=CanvasSpriteRenderer.sharedMaterial.shader.name; +if(CanvasImage != null) +{ +Image img = CanvasImage; +if (img.material==null) dfname="Sprites/Default"; +} +if (dfname == "Sprites/Default") +{ +ForceMaterial.shader=Shader.Find(shader); +ForceMaterial.hideFlags = HideFlags.None; +if(CanvasSpriteRenderer != null) +{ +CanvasSpriteRenderer.sharedMaterial = ForceMaterial; +} +else if(CanvasImage != null) +{ +Image img = CanvasImage; +if (img.material==null) +{ +CanvasImage.material = ForceMaterial; +} +} +} +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", 1f + _TimeX); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _ColorX); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_TimeX", 1f + _TimeX); + CanvasImage.material.SetColor("_ColorX", _ColorX); + } + + } + + } + + void OnDestroy() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Hologram3)),CanEditMultipleObjects] +public class _2dxFX_AL_Hologram3_Editor : Editor +{ +private SerializedObject m_object; + +public void OnEnable() +{ + +m_object = new SerializedObject(targets); +} + +public override void OnInspectorGUI() +{ +m_object.Update(); +DrawDefaultInspector(); + +_2dxFX_AL_Hologram3 _2dxScript = (_2dxFX_AL_Hologram3)target; + +Texture2D icon = Resources.Load ("2dxfxinspector-al") as Texture2D; +if (icon) +{ +Rect r; +float ih=icon.height; +float iw=icon.width; +float result=ih/iw; +float w=Screen.width; +result=result*w; +r = GUILayoutUtility.GetRect(ih, result); +EditorGUI.DrawTextureTransparent(r,icon); +} + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); + + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + +if (_2dxScript.ForceMaterial == null) +{ +_2dxScript.ActiveChange = true; +} +else +{ +if(GUILayout.Button("Remove Shared Material")) +{ +_2dxScript.ForceMaterial= null; +_2dxScript.ShaderChange = 1; +_2dxScript.ActiveChange = true; +_2dxScript.CallUpdate(); +} + +EditorGUILayout.PropertyField (m_object.FindProperty ("ActiveChange"), new GUIContent ("Change Material Property", "Change The Material Property")); +} + +if (_2dxScript.ActiveChange) +{ + +EditorGUILayout.BeginVertical("Box"); + +Texture2D icone = Resources.Load ("2dxfx-icon-time") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); +icone = Resources.Load ("2dxfx-icon-distortion") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion")); +icone = Resources.Load ("2dxfx-icon-color") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("_ColorX"), new GUIContent("Change the color", icone, "Change the color of the sprite")); + +EditorGUILayout.BeginVertical("Box"); + + + +icone = Resources.Load ("2dxfx-icon-fade") as Texture2D; +EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + +EditorGUILayout.EndVertical(); +EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); +} + +m_object.ApplyModifiedProperties(); + +} +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram3.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram3.cs.meta new file mode 100644 index 00000000..c53e8070 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Hologram3.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a4f1916f860af7a4c8f018e0376d36d6 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ice.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ice.cs new file mode 100644 index 00000000..7a4b0ba8 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ice.cs @@ -0,0 +1,531 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Ice")] +[System.Serializable] +public class _2dxFX_AL_Ice : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Ice"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(16, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Ice)), CanEditMultipleObjects] +public class _2dxFX_AL_Ice_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Ice _2dxScript = (_2dxFX_AL_Ice)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Ice Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Ice Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ice.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ice.cs.meta new file mode 100644 index 00000000..6d244aec --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Ice.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5780077e1fb95e0469244b36d211c5de +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_IcedFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_IcedFX.cs new file mode 100644 index 00000000..fd199494 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_IcedFX.cs @@ -0,0 +1,464 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/IcedFX")] +[System.Serializable] +public class _2dxFX_AL_IcedFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/IcedFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 4f)] public float Iced = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Iced); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Iced); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_IcedFX)), CanEditMultipleObjects] +public class _2dxFX_AL_IcedFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_IcedFX _2dxScript = (_2dxFX_AL_IcedFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Iced"), new GUIContent("Iced Value", icone, "Turn your sprite into an iced sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_IcedFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_IcedFX.cs.meta new file mode 100644 index 00000000..90552980 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_IcedFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 73c3bafb38cfad542a5dcbd6e1585f45 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Jelly.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Jelly.cs new file mode 100644 index 00000000..309be7b1 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Jelly.cs @@ -0,0 +1,475 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Jelly")] +[System.Serializable] +public class _2dxFX_AL_Jelly : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Jelly"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(1f, 2f)] public float Inside = 1.1f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Inside", Inside); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Inside", Inside); + CanvasImage.material.SetFloat("_Speed", Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Jelly)), CanEditMultipleObjects] +public class _2dxFX_AL_Jelly_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Jelly _2dxScript = (_2dxFX_AL_Jelly)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Jelly Distortion", icone, "Change the distortion of the Jelly FX")); + icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Inside"), new GUIContent("Jelly Inside", icone, "Change the inside distortion of the Jelly FX")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Jelly.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Jelly.cs.meta new file mode 100644 index 00000000..5091f918 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Jelly.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 59461dfef2d175044990d61f1ba70e15 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_JellyAutoMove.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_JellyAutoMove.cs new file mode 100644 index 00000000..e0157368 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_JellyAutoMove.cs @@ -0,0 +1,495 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/JellyAutoMove")] +[System.Serializable] +public class _2dxFX_AL_JellyAutoMove : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Jelly"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float RandomPos = 1.0f; + [HideInInspector] [Range(1f, 2f)] public float Inside = 1.0f; + [HideInInspector] [Range(1f, 8f)] public float Stabilisation = 4.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + + Vector3 SaveMove1; + Vector3 SaveMove2; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + Heat = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + SaveMove1 = transform.position; + if (SaveMove1.x != SaveMove2.x) Heat += 0.5f; + if (SaveMove1.y != SaveMove2.y) Heat += 0.5f; + if (SaveMove1.z != SaveMove2.z) Heat += 0.5f; + + Heat -= Time.deltaTime * Stabilisation; + if (Heat > 4) Heat = 4; + if (Heat < 0) { RandomPos = Random.Range(0, 256); Heat = 0; } + SaveMove2 = SaveMove1; + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_RandomPos", RandomPos); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Inside", Inside); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_RandomPos", RandomPos); + CanvasImage.material.SetFloat("_Inside", Inside); + CanvasImage.material.SetFloat("_Speed", Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_JellyAutoMove)), CanEditMultipleObjects] +public class _2dxFX_AL_JellyAutoMove_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_JellyAutoMove _2dxScript = (_2dxFX_AL_JellyAutoMove)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + // EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Jelly Distortion", icone, "Change the distortion of the Jelly FX")); + // icone = Resources.Load ("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Inside"), new GUIContent("Jelly Inside", icone, "Change the inside distortion of the Jelly FX")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Stabilisation"), new GUIContent("Stabilisation Speed", icone, "Change the Stabilisation speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_JellyAutoMove.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_JellyAutoMove.cs.meta new file mode 100644 index 00000000..9e50b004 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_JellyAutoMove.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9aff37d1a344a804f9c8c49e51c24894 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Lightning.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Lightning.cs new file mode 100644 index 00000000..be2bcf9b --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Lightning.cs @@ -0,0 +1,531 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Lightning")] +[System.Serializable] +public class _2dxFX_AL_Lightning : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Lightning"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(16, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Lightning)), CanEditMultipleObjects] +public class _2dxFX_AL_Lightning_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Lightning _2dxScript = (_2dxFX_AL_Lightning)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Lightning Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Lightning Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Lightning.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Lightning.cs.meta new file mode 100644 index 00000000..9f3ed013 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Lightning.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eeebf105769ef2d4bafdc4ec981b2c81 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_LightningBolt.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_LightningBolt.cs new file mode 100644 index 00000000..c9aacb97 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_LightningBolt.cs @@ -0,0 +1,531 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/LightningBolt")] +[System.Serializable] +public class _2dxFX_AL_LightningBolt : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/LightningBolt"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(16, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_LightningBolt)), CanEditMultipleObjects] +public class _2dxFX_AL_LightningBolt_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_LightningBolt _2dxScript = (_2dxFX_AL_LightningBolt)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Lightning Bolt Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Lightning Bolt Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_LightningBolt.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_LightningBolt.cs.meta new file mode 100644 index 00000000..872cad9f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_LightningBolt.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1c7264ab13749964c95fbaae0d86a027 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquid.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquid.cs new file mode 100644 index 00000000..362ee7ba --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquid.cs @@ -0,0 +1,479 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Liquid")] +[System.Serializable] +public class _2dxFX_AL_Liquid : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Liquid"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Liquid)), CanEditMultipleObjects] +public class _2dxFX_AL_Liquid_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Liquid _2dxScript = (_2dxFX_AL_Liquid)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Liquid Distortion", icone, "Change the distortion of the liquid")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Light"), new GUIContent("Light Intensity", icone, "Change the intensity of the light")); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("EValue"), new GUIContent("Effect Value", icone, "Change the effect intensity")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquid.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquid.cs.meta new file mode 100644 index 00000000..468746ba --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquid.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 12fc00c796e67c140bb2b3e697384077 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquify.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquify.cs new file mode 100644 index 00000000..2f40a49c --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquify.cs @@ -0,0 +1,512 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Liquify")] +[System.Serializable] +public class _2dxFX_AL_Liquify : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Liquify"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0f, 1f)] public float TurnToLiquid = 0.052f; + [HideInInspector] [Range(0.0f, 32f)] public float Heat = 4.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + CanvasSpriteRenderer.sharedMaterial.SetFloat("TurnToLiquid", TurnToLiquid); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + CanvasImage.material.SetFloat("TurnToLiquid", TurnToLiquid); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Liquify)), CanEditMultipleObjects] +public class _2dxFX_AL_Liquify_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Liquify _2dxScript = (_2dxFX_AL_Liquify)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TurnToLiquid"), new GUIContent("Turn To Liquid", icone, "Turn to liquid = 0 = normal sprite : 1 = Liquify")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Liquid Distortion", icone, "Change the distortion of the liquid")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquify.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquify.cs.meta new file mode 100644 index 00000000..ab060b07 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Liquify.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e93faeefd4426d644bc78b94f674e6f1 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_MetalFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_MetalFX.cs new file mode 100644 index 00000000..a3a93004 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_MetalFX.cs @@ -0,0 +1,462 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/MetalFX")] +[System.Serializable] +public class _2dxFX_AL_MetalFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/MetalFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 6f)] public float Metal = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Metal); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Metal); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_MetalFX)), CanEditMultipleObjects] +public class _2dxFX_AL_MetalFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_MetalFX _2dxScript = (_2dxFX_AL_MetalFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Metal"), new GUIContent("Metal Value", icone, "Turn your sprite into a metal sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_MetalFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_MetalFX.cs.meta new file mode 100644 index 00000000..d207274f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_MetalFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b9bcc820e70d12147b95aea97524c8c1 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.cs new file mode 100644 index 00000000..da2068ac --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.cs @@ -0,0 +1,562 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Mystic_Distortion")] +[System.Serializable] +public class _2dxFX_AL_Mystic_Distortion : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Mystic_Distortion"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 0.45f)] public float _Pitch = 0.45f; + [HideInInspector] public bool Pitch_Wave = true; + [HideInInspector] [Range(0f, 16f)] public float _Pitch_Speed = 1.0f; + [HideInInspector] [Range(0f, 1f)] public float _Pitch_Offset = 0.0f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetX = 56f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetY = 28f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceX = 0.01f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceY = 0.04f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeX = 1.16f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeY = 5.12f; + [HideInInspector] public bool AutoPlayWaveX = false; + [HideInInspector] [Range(0f, 5f)] public float AutoPlaySpeedX = 5f; + [HideInInspector] public bool AutoPlayWaveY = false; + [HideInInspector] [Range(0f, 50f)] public float AutoPlaySpeedY = 5f; + [HideInInspector] public bool AutoRandom = false; + [HideInInspector] [Range(0f, 50f)] public float AutoRandomRange = 10f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + + if (Pitch_Wave) + { + _Pitch_Offset = Mathf.Sin(Time.time * _Pitch_Speed) * 0.05f; + + } + else + { + _Pitch_Offset = 0; + } + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Pitch", _Pitch + _Pitch_Offset); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceX", _DistanceX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceY", _DistanceY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeY", _WaveTimeY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + + CanvasImage.material.SetFloat("_Pitch", _Pitch + _Pitch_Offset); + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + CanvasImage.material.SetFloat("_DistanceX", _DistanceX); + CanvasImage.material.SetFloat("_DistanceY", _DistanceY); + CanvasImage.material.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasImage.material.SetFloat("_WaveTimeY", _WaveTimeY); + } + + float timerange; + if (AutoRandom) + { + timerange = (Random.Range(1, AutoRandomRange) / 5) * Time.deltaTime; + } + else + { + timerange = Time.deltaTime; + } + + if (AutoPlayWaveX) _WaveTimeX += AutoPlaySpeedX * timerange; + if (AutoPlayWaveY) _WaveTimeY += AutoPlaySpeedY * timerange; + if (_WaveTimeX > 6.28f) _WaveTimeX = 0f; + if (_WaveTimeY > 6.28f) _WaveTimeY = 0f; + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Mystic_Distortion)), CanEditMultipleObjects] +public class _2dxFX_AL_Mystic_Distortion_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Mystic_Distortion _2dxScript = (_2dxFX_AL_Mystic_Distortion)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset of X")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset of Y")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Pitch"), new GUIContent("Pitch", icone, "Change the Pitch Offset")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + + + EditorGUILayout.PropertyField(m_object.FindProperty("Pitch_Wave"), new GUIContent("Active Pitch Wave", icone, "Active the pitch wave FX")); + + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + if (_2dxScript.Pitch_Wave) + { + EditorGUILayout.PropertyField(m_object.FindProperty("_Pitch_Speed"), new GUIContent("Pitch Speed", icone, "Change the Speed of the pitch FX")); + } + + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceX"), new GUIContent("Distance X", icone, "Change the distance of X")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceY"), new GUIContent("Distance Y", icone, "Change the distance of Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeX"), new GUIContent("Wave Time X", icone, "Change the time speed of the wave X")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeY"), new GUIContent("Wave Time Y", icone, "Change the time speed of the wave Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + + + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveX"), new GUIContent("Active AutoPlay Wave X", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedX"), new GUIContent("AutoPlay Speed X", icone, "Speed of the auto play X")); + } + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveY"), new GUIContent("Active AutoPlay Wave Y", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedY"), new GUIContent("AutoPlay Speed Y", icone, "Speed of the auto play Y")); + } + icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandom"), new GUIContent("Auto Random", icone, "Active the random value")); + if (_2dxScript.AutoRandom) + { + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandomRange"), new GUIContent("Auto Random Range", icone, "Change the random value")); + } + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.cs.meta new file mode 100644 index 00000000..3514885d --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Mystic_Distortion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7a927e63f5a442347bbfc1759a89a514 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Negative.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Negative.cs new file mode 100644 index 00000000..821b3cd8 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Negative.cs @@ -0,0 +1,463 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Negative")] +[System.Serializable] +public class _2dxFX_AL_Negative : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Negative"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Negative = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Negative); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Negative); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Negative)), CanEditMultipleObjects] +public class _2dxFX_AL_Negative_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Negative _2dxScript = (_2dxFX_AL_Negative)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Negative"), new GUIContent("Negative Value", icone, "Change the value of the Negative effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Negative.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Negative.cs.meta new file mode 100644 index 00000000..cfe89473 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Negative.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: af3269202acd1b043a19f1d2e341b421 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Noise.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Noise.cs new file mode 100644 index 00000000..92123b6b --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Noise.cs @@ -0,0 +1,462 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Noise")] +[System.Serializable] +public class _2dxFX_AL_Noise : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Noise"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Noise = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Noise); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Noise); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Noise)), CanEditMultipleObjects] +public class _2dxFX_AL_Noise_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Noise _2dxScript = (_2dxFX_AL_Noise)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Noise"), new GUIContent("Noise Value", icone, "Change the value of the Noise effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Noise.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Noise.cs.meta new file mode 100644 index 00000000..592e33c9 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Noise.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8678104d824a9f14fab2fbbd01aff96e +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_NoiseAnimated.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_NoiseAnimated.cs new file mode 100644 index 00000000..cb7b8afd --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_NoiseAnimated.cs @@ -0,0 +1,462 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/NoiseAnimated")] +[System.Serializable] +public class _2dxFX_AL_NoiseAnimated : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/NoiseAnimated"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Noise = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Noise); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Noise); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_NoiseAnimated)), CanEditMultipleObjects] +public class _2dxFX_AL_NoiseAnimated_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_NoiseAnimated _2dxScript = (_2dxFX_AL_NoiseAnimated)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Noise"), new GUIContent("Noise Value", icone, "Change the value of the Noise effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_NoiseAnimated.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_NoiseAnimated.cs.meta new file mode 100644 index 00000000..7a75f833 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_NoiseAnimated.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: add1dab9766afeb41b26f87ac4decdaa +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Normal.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Normal.cs new file mode 100644 index 00000000..ac22ac2a --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Normal.cs @@ -0,0 +1,452 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/LetterEntered")] +[System.Serializable] +public class _2dxFX_AL_Normal : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/LetterEntered"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + + + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + } + } + + } + + void OnDestroy() + { + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Normal)), CanEditMultipleObjects] +public class _2dxFX_AL_Normal_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Normal _2dxScript = (_2dxFX_AL_Normal)target; + + + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Normal.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Normal.cs.meta new file mode 100644 index 00000000..6acd3c00 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Normal.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: adb38d44e75fb304d8c8d8203069dfd2 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Offset.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Offset.cs new file mode 100644 index 00000000..efccfdc2 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Offset.cs @@ -0,0 +1,556 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Offset")] +[System.Serializable] +public class _2dxFX_AL_Offset : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + + private string shader = "2DxFX/AL/Offset"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-1f, 1f)] public float _OffsetX = 0f; + [HideInInspector] [Range(-1f, 1f)] public float _OffsetY = 0f; + [HideInInspector] [Range(0.001f, 8f)] public float _ZoomX = 1f; + [HideInInspector] [Range(0.001f, 8f)] public float _ZoomY = 1f; + [HideInInspector] [Range(0.001f, 64f)] public float _ZoomXY = 1f; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(-100, 100)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(-100, 100)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + + if (_AutoScrollX == true) + { + _AutoScrollCountX += _AutoScrollSpeedX * 0.01f * Time.deltaTime; + if (_AutoScrollCountX < 0) _AutoScrollCountX = 1; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", 1 + _AutoScrollCountX); + + } + else + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", 1 + _OffsetX); + } + if (_AutoScrollY == true) + { + _AutoScrollCountY += _AutoScrollSpeedY * 0.01f * Time.deltaTime; + if (_AutoScrollCountY < 0) _AutoScrollCountY = 1; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", 1 + _AutoScrollCountY); + } + else + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", 1 + _OffsetY); + } + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ZoomX", _ZoomX * _ZoomXY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ZoomY", _ZoomY * _ZoomXY); + } + else if (CanvasImage != null) + { + + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + if (_AutoScrollX == true) + { + _AutoScrollCountX += _AutoScrollSpeedX * 0.01f * Time.deltaTime; + if (_AutoScrollCountX < 0) _AutoScrollCountX = 1; + CanvasImage.material.SetFloat("_OffsetX", 1 + _AutoScrollCountX); + } + else + { + CanvasImage.material.SetFloat("_OffsetX", 1 + _OffsetX); + } + if (_AutoScrollY == true) + { + _AutoScrollCountY += _AutoScrollSpeedY * 0.01f * Time.deltaTime; + if (_AutoScrollCountY < 0) _AutoScrollCountY = 1; + CanvasImage.material.SetFloat("_OffsetY", 1 + _AutoScrollCountY); + } + else + { + CanvasImage.material.SetFloat("_OffsetY", 1 + _OffsetY); + } + CanvasImage.material.SetFloat("_ZoomX", _ZoomX * _ZoomXY); + CanvasImage.material.SetFloat("_ZoomY", _ZoomY * _ZoomXY); + + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Offset)), CanEditMultipleObjects] +public class _2dxFX_AL_Offset_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Offset _2dxScript = (_2dxFX_AL_Offset)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset value of X")); + + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset value of Y")); + + icone = Resources.Load("2dxfx-icon-clip_up") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ZoomX"), new GUIContent("Zoom X", icone, "Change the Zoom value of X")); + + icone = Resources.Load("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ZoomY"), new GUIContent("Zoom Y", icone, "Change the Zoom value of Y")); + + icone = Resources.Load("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ZoomXY"), new GUIContent("Zoom XY", icone, "Change the Zoom value of X and Y. Note if you want to change only the X or the Y, you must set Zoom XY to 1")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollX"), new GUIContent("Auto Scroll X", icone, "Change the value of the posterize effect")); + if (_2dxScript._AutoScrollX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedX"), new GUIContent("Auto Scroll Speed X", icone, "Change the value of the posterize effect")); + } + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollY"), new GUIContent("Auto Scroll Y", icone, "Change the value of the posterize effect")); + + if (_2dxScript._AutoScrollY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedY"), new GUIContent("Auto Scroll Speed Y", icone, "Change the value of the posterize effect")); + } + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Offset.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Offset.cs.meta new file mode 100644 index 00000000..af1a71e3 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Offset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f9118a94ae8f16f4c950dfeae7447ac5 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Outline.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Outline.cs new file mode 100644 index 00000000..3a3e4a73 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Outline.cs @@ -0,0 +1,469 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Outline")] +[System.Serializable] +public class _2dxFX_AL_Outline : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + + private string shader = "2DxFX/AL/Outline"; + + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] public Color _ColorX = new Color(1f, 1f, 1f, 1f); + [HideInInspector] [Range(0f, 0.020f)] public float _OutLineSpread = 0.007f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _ColorX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OutLineSpread", _OutLineSpread); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _ColorX); + CanvasImage.material.SetFloat("_OutLineSpread", _OutLineSpread); + } + + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Outline)), CanEditMultipleObjects] +public class _2dxFX_AL_Outline_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Outline _2dxScript = (_2dxFX_AL_Outline)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorX"), new GUIContent("Outline color", icone, "Change the color of the outline")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OutLineSpread"), new GUIContent("Outline size", icone, "Change the size of the outline")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Outline.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Outline.cs.meta new file mode 100644 index 00000000..e6355c24 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Outline.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5843bab5f308734478b4f1edac2b16ae +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pattern.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pattern.cs new file mode 100644 index 00000000..5f482e0f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pattern.cs @@ -0,0 +1,569 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Pattern")] +[System.Serializable] +public class _2dxFX_AL_Pattern : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Pattern"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] public float _OffsetX; + [HideInInspector] public float _OffsetY; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(-3, 3)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(-3, 3)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.material.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasSpriteRenderer.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + if (_AutoScrollCountX > 1) _AutoScrollCountX = 0; + if (_AutoScrollCountX < -1) _AutoScrollCountX = 0; + if (_AutoScrollCountY > 1) _AutoScrollCountY = 0; + if (_AutoScrollCountY < -1) _AutoScrollCountY = 0; + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + } + + if (gameObject.activeSelf) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + + } + + void OnEnable() + { + + + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + } + + + +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Pattern)), CanEditMultipleObjects] +public class _2dxFX_AL_Pattern_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Pattern _2dxScript = (_2dxFX_AL_Pattern)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("__MainTex2"), new GUIContent("Texture Pattern", icone, "Change the value of the posterize effect")); + if (_2dxScript.__MainTex2) + { + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the value of the posterize effect")); + + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the value of the posterize effect")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollX"), new GUIContent("Auto Scroll X", icone, "Change the value of the posterize effect")); + if (_2dxScript._AutoScrollX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedX"), new GUIContent("Auto Scroll Speed X", icone, "Change the value of the posterize effect")); + } + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollY"), new GUIContent("Auto Scroll Y", icone, "Change the value of the posterize effect")); + + if (_2dxScript._AutoScrollY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedY"), new GUIContent("Auto Scroll Speed Y", icone, "Change the value of the posterize effect")); + } + } + else + { + EditorGUILayout.LabelField(new GUIContent("**You must add a sprite on the Texture Pattern field**", "You need to add a sprite here in order to use the pattern fx, you can use the same sprite if you want")); + } + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pattern.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pattern.cs.meta new file mode 100644 index 00000000..050ebcda --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pattern.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9f427317e89c046438811f4e31220f0c +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel.cs new file mode 100644 index 00000000..e70ad7a5 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel.cs @@ -0,0 +1,467 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Pixel")] +[System.Serializable] + +public class _2dxFX_AL_Pixel : MonoBehaviour +{ + + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + + private string shader = "2DxFX/AL/Pixel"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(4f, 128f)] public float _Offset = 32f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", _Alpha); + CanvasImage.material.SetFloat("_Offset", _Offset); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Pixel)), CanEditMultipleObjects] +public class _2dxFX_AL_Pixel_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Pixel _2dxScript = (_2dxFX_AL_Pixel)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel.cs.meta new file mode 100644 index 00000000..c485291e --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 42c34d6439f139149ba86a053dbbd619 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.cs new file mode 100644 index 00000000..1832e6a8 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.cs @@ -0,0 +1,465 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Pixel 8 Bits Black & White")] +[System.Serializable] +public class _2dxFX_AL_Pixel8bitsBW : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Pixel8bitsBW"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Size = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Offset = 1f; + [HideInInspector] [Range(0f, 10f)] public float _Offset2 = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", _Size); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset2", _Offset2); + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Size", _Size); + CanvasImage.material.SetFloat("_Offset", _Offset); + CanvasImage.material.SetFloat("_Offset2", _Offset2); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Pixel8bitsBW)), CanEditMultipleObjects] +public class _2dxFX_AL_Pixel8bitsBW_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Pixel8bitsBW _2dxScript = (_2dxFX_AL_Pixel8bitsBW)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Size"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset2"), new GUIContent("Brightness Color", icone, "Change the brightness of the color")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.cs.meta new file mode 100644 index 00000000..ea81d49d --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsBW.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c6267f7b177bf3647a4f23d5ba334180 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.cs new file mode 100644 index 00000000..c311a680 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.cs @@ -0,0 +1,470 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Pixel 8 Bits Commodore 64")] +[System.Serializable] +public class _2dxFX_AL_Pixel8bitsC64 : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Pixel8bitsC64"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Size = 1f; + [HideInInspector] [Range(0.01f, 3f)] public float _Offset = 1f; + [HideInInspector] [Range(0f, 3f)] public float _Offset2 = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", _Size); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset2", _Offset2); + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Size", _Size); + CanvasImage.material.SetFloat("_Offset", _Offset); + CanvasImage.material.SetFloat("_Offset2", _Offset2); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Pixel8bitsC64)), CanEditMultipleObjects] +public class _2dxFX_AL_Pixel8bitsC64_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Pixel8bitsC64 _2dxScript = (_2dxFX_AL_Pixel8bitsC64)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Size"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Horizontal Size", icone, "Change the horizontal size of the pixel")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset2"), new GUIContent("Brightness Color", icone, "Change the brightness of the color")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.cs.meta new file mode 100644 index 00000000..bad82548 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsC64.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4173584028ef10b4da661f570f66dfe5 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.cs new file mode 100644 index 00000000..ac613a10 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.cs @@ -0,0 +1,465 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Pixel 8 Bits Gameboy")] +[System.Serializable] +public class _2dxFX_AL_Pixel8bitsGB : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Pixel8bitsGB"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Size = 1f; + [HideInInspector] [Range(0f, 3f)] public float _Offset = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", _Size); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset2", _Offset); + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Size", _Size); + CanvasImage.material.SetFloat("_Offset2", _Offset); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Pixel8bitsGB)), CanEditMultipleObjects] +public class _2dxFX_AL_Pixel8bitsGB_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Pixel8bitsGB _2dxScript = (_2dxFX_AL_Pixel8bitsGB)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Size"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Brightness Color", icone, "Change the brightness of the color")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.cs.meta new file mode 100644 index 00000000..5cb8105a --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Pixel8bitsGB.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fb6f3481dbff04a4fa0730eba0821d64 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PixelDie.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PixelDie.cs new file mode 100644 index 00000000..cd2c6667 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PixelDie.cs @@ -0,0 +1,523 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/PixelDie")] +[System.Serializable] +public class _2dxFX_AL_PixelDie : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/PixelDie"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Value1 = 0.5f; + [HideInInspector] [Range(0, 1)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_PixelDie)), CanEditMultipleObjects] +public class _2dxFX_AL_PixelDie_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_PixelDie _2dxScript = (_2dxFX_AL_PixelDie)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Pixel Dead Value", icone, "Change the pixel value 0 = Full / 1 = Nothing")); + + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PixelDie.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PixelDie.cs.meta new file mode 100644 index 00000000..44ade54f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PixelDie.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b49e27f5e9dac6648a8f1c7e8dede43e +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.cs new file mode 100644 index 00000000..e5602f99 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.cs @@ -0,0 +1,479 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/PlasmaRainbow")] +[System.Serializable] +public class _2dxFX_AL_PlasmaRainbow : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/PlasmaRainbow"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.1f, 8f)] public float _Colors = 6f; + [HideInInspector] [Range(0.1f, 4f)] public float _Offset = 2.5f; + [HideInInspector] private float _TimeX = 0; + [HideInInspector] [Range(0, 3)] public float Speed = 1; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Colors", _Colors); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", _TimeX); + } + + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Colors", _Colors); + CanvasImage.material.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_TimeX", _TimeX); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_PlasmaRainbow)), CanEditMultipleObjects] +public class _2dxFX_AL_PlasmaRainbow_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_PlasmaRainbow _2dxScript = (_2dxFX_AL_PlasmaRainbow)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Colors"), new GUIContent("Change the colors", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Change the offset", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Speed Value", icone, "Change the speed value")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.cs.meta new file mode 100644 index 00000000..a3fd4e35 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaRainbow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a3d8adad5a2a1048be9f5475bd31884 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaShield.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaShield.cs new file mode 100644 index 00000000..3fdcff2f --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaShield.cs @@ -0,0 +1,478 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/PlasmaShield")] +[System.Serializable] +public class _2dxFX_AL_PlasmaShield : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/PlasmaShield"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] public Color _ColorX = new Color(1f, 1f, 1f, 1f); + [HideInInspector] [Range(0.1f, 4f)] public float _Offset = 2.5f; + [HideInInspector] private float _TimeX = 0; + [HideInInspector] [Range(0, 3)] public float Speed = 1; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _ColorX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", _TimeX); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _ColorX); + CanvasImage.material.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_TimeX", _TimeX); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_PlasmaShield)), CanEditMultipleObjects] +public class _2dxFX_AL_PlasmaShield_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_PlasmaShield _2dxScript = (_2dxFX_AL_PlasmaShield)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorX"), new GUIContent("Change the colors", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Change the offset", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Speed Value", icone, "Change the speed value")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaShield.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaShield.cs.meta new file mode 100644 index 00000000..0ff6db49 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_PlasmaShield.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8934c1fee9d0aeb4d95c095c082386f8 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Posterize.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Posterize.cs new file mode 100644 index 00000000..5b9c86a1 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Posterize.cs @@ -0,0 +1,460 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Posterize")] +[System.Serializable] +public class _2dxFX_AL_Posterize : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Posterize"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(1, 256)] public float Posterize = 120.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Posterize); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Posterize); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Posterize)), CanEditMultipleObjects] +public class _2dxFX_AL_Posterize_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Posterize _2dxScript = (_2dxFX_AL_Posterize)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Posterize"), new GUIContent("Posterize Value", icone, "Change the value of the posterize effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Posterize.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Posterize.cs.meta new file mode 100644 index 00000000..0ef3bc4d --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Posterize.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 450ea7e6279b2914e88b268ffc841454 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SandFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SandFX.cs new file mode 100644 index 00000000..c37acd9d --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SandFX.cs @@ -0,0 +1,461 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/SandFX")] +[System.Serializable] +public class _2dxFX_AL_SandFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/SandFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 1f)] public float Sand = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Sand); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Sand); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_SandFX)), CanEditMultipleObjects] +public class _2dxFX_AL_SandFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_SandFX _2dxScript = (_2dxFX_AL_SandFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Sand"), new GUIContent("Sand Value", icone, "Turn your sprite into a sand sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SandFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SandFX.cs.meta new file mode 100644 index 00000000..ec8416e2 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SandFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c24a827bba8dbae42b5e4baa1db65750 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sepia.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sepia.cs new file mode 100644 index 00000000..189115ad --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sepia.cs @@ -0,0 +1,460 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/GrayScale")] +[System.Serializable] +public class _2dxFX_AL_Sepia : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Sepia"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float _EffectAmount = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", _EffectAmount); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", _EffectAmount); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Sepia)), CanEditMultipleObjects] +public class _2dxFX_AL_Sepia_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Sepia _2dxScript = (_2dxFX_AL_Sepia)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_EffectAmount"), new GUIContent("Turn into Sepia", icone, "Turn into Sepia")); + + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sepia.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sepia.cs.meta new file mode 100644 index 00000000..74b83fad --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sepia.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 816052d47fb3f7e4d9e08469e3989517 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sharpen.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sharpen.cs new file mode 100644 index 00000000..9a858011 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sharpen.cs @@ -0,0 +1,460 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Sharpen")] +[System.Serializable] +public class _2dxFX_AL_Sharpen : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Sharpen"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 12f)] public float Sharpen = 4.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Sharpen); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Sharpen); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Sharpen)), CanEditMultipleObjects] +public class _2dxFX_AL_Sharpen_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Sharpen _2dxScript = (_2dxFX_AL_Sharpen)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Sharpen"), new GUIContent("Sharpness Value", icone, "Change the sharp value of the sprite")); + + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sharpen.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sharpen.cs.meta new file mode 100644 index 00000000..0715aa33 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Sharpen.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 81a2cb66fa11c7b47a9983b7b06201a6 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.cs new file mode 100644 index 00000000..cb363ddc --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.cs @@ -0,0 +1,590 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Shiny Reflect")] +[System.Serializable] +public class _2dxFX_AL_Shiny_Reflect : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + [HideInInspector] public Texture2D __MainTex2; + private string shader = "2DxFX/AL/Shiny_Reflect"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(-0.5f, 1.5f)] public float Light = 1.0f; + [HideInInspector] [Range(0.05f, 1f)] public float LightSize = 0.5f; + [HideInInspector] public bool UseShinyCurve = true; + [HideInInspector] public AnimationCurve ShinyLightCurve; + + [HideInInspector] [Range(0, 32)] public float AnimationSpeedReduction = 3f; + [HideInInspector] [Range(0f, 2f)] public float Intensity = 1.0f; + [HideInInspector] [Range(0f, 1f)] public float OnlyLight = 0.0f; + [HideInInspector] [Range(-1f, 1f)] public float LightBump = 0.05f; + private float ShinyLightCurveTime; + + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + // VS AnimationCurve To C# for ShinyLightCurve + // Put this code on 'Normal' or 'Awake' fonction + if (ShinyLightCurve == null) ShinyLightCurve = new AnimationCurve(); + + if (ShinyLightCurve.length == 0) + { + ShinyLightCurve.AddKey(7.780734E-06f, -0.4416301f); + ShinyLightCurve.keys[0].inTangent = 0f; + ShinyLightCurve.keys[0].outTangent = 0f; + + ShinyLightCurve.AddKey(0.4310643f, 1.113406f); + ShinyLightCurve.keys[1].inTangent = 0.2280953f; + ShinyLightCurve.keys[1].outTangent = 0.2280953f; + + ShinyLightCurve.AddKey(0.5258899f, 1.229086f); + ShinyLightCurve.keys[2].inTangent = -0.1474274f; + ShinyLightCurve.keys[2].outTangent = -0.1474274f; + + ShinyLightCurve.AddKey(0.6136486f, 1.113075f); + ShinyLightCurve.keys[3].inTangent = 0.005268873f; + ShinyLightCurve.keys[3].outTangent = 0.005268873f; + + ShinyLightCurve.AddKey(0.9367767f, -0.4775873f); + ShinyLightCurve.keys[4].inTangent = -3.890693f; + ShinyLightCurve.keys[4].outTangent = -3.890693f; + + ShinyLightCurve.AddKey(1.144408f, -0.4976555f); + ShinyLightCurve.keys[5].inTangent = 0f; + ShinyLightCurve.keys[5].outTangent = 0f; + + + ShinyLightCurve.postWrapMode = WrapMode.Loop; + ShinyLightCurve.preWrapMode = WrapMode.Loop; + + } + + + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (UseShinyCurve) + { + if (ShinyLightCurve != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", ShinyLightCurve.Evaluate(ShinyLightCurveTime)); + ShinyLightCurveTime += (Time.deltaTime / 8) * AnimationSpeedReduction; + } + else + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Light); + } + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", LightSize); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", Intensity); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", OnlyLight); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value5", LightBump); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + if (UseShinyCurve) + { + CanvasImage.material.SetFloat("_Distortion", ShinyLightCurve.Evaluate(ShinyLightCurveTime)); + ShinyLightCurveTime += (Time.deltaTime / 8) * AnimationSpeedReduction; + } + else + { + CanvasImage.material.SetFloat("_Distortion", Light); + } + + CanvasImage.material.SetFloat("_Value2", LightSize); + CanvasImage.material.SetFloat("_Value3", Intensity); + CanvasImage.material.SetFloat("_Value4", OnlyLight); + CanvasImage.material.SetFloat("_Value5", LightBump); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Shiny_Reflect)), CanEditMultipleObjects] +public class _2dxFX_AL_Shiny_Reflect_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Shiny_Reflect _2dxScript = (_2dxFX_AL_Shiny_Reflect)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("UseShinyCurve"), new GUIContent("Use Shiny Curve", "Change The Material Property")); + + if (_2dxScript.UseShinyCurve) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ShinyLightCurve"), new GUIContent("Shiny Light Curve", icone, "Use Curve")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AnimationSpeedReduction"), new GUIContent("Animation Speed Reduction", icone, "Change the speed of the animation based on the curve timeline")); + } + else + { + EditorGUILayout.PropertyField(m_object.FindProperty("Light"), new GUIContent("Shiny Light", icone, "Position of the Shine Light!")); + } + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("LightSize"), new GUIContent("Shiny Light Size", icone, "Size of the Shine Light!")); + EditorGUILayout.PropertyField(m_object.FindProperty("Intensity"), new GUIContent("Light Intensity", icone, "Intensity of the light")); + EditorGUILayout.PropertyField(m_object.FindProperty("OnlyLight"), new GUIContent("Only Show Light", icone, "the value between the sprite and no sprite to show only the light")); + EditorGUILayout.PropertyField(m_object.FindProperty("LightBump"), new GUIContent("Light Bump Intensity", icone, "the intensity of the light bump")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.cs.meta new file mode 100644 index 00000000..3795c500 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Shiny_Reflect.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 24fd81b241ac36f429f4e146a8d439d6 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SkyCloud.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SkyCloud.cs new file mode 100644 index 00000000..dbe3ddb1 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SkyCloud.cs @@ -0,0 +1,603 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/SkyCloud")] +[System.Serializable] +public class _2dxFX_AL_SkyCloud : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/SkyCloud"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] public float _OffsetX; + [HideInInspector] public float _OffsetY; + [HideInInspector] [Range(0.1f, 2f)] public float _Zoom = 0.2f; + [HideInInspector] [Range(-1, 1)] public float _Intensity = 0.3f; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(-2, 2)] public float _AutoScrollSpeedX = 0.08f; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(-2, 2)] public float _AutoScrollSpeedY = 0.02f; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Zoom", _Zoom); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Intensity", _Intensity); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Zoom", _Zoom); + CanvasImage.material.SetFloat("_Intensity", _Intensity); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + + } + if (_AutoScrollCountX > 1) _AutoScrollCountX = 0; + if (_AutoScrollCountX < -1) _AutoScrollCountX = 0; + if (_AutoScrollCountY > 1) _AutoScrollCountY = 0; + if (_AutoScrollCountY < -1) _AutoScrollCountY = 0; + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + } + + if (gameObject.activeSelf) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + + + +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_SkyCloud)), CanEditMultipleObjects] +public class _2dxFX_AL_SkyCloud_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_SkyCloud _2dxScript = (_2dxFX_AL_SkyCloud)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the start offset of the shadow effect")); + + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the start offset of the shadow effect")); + + icone = Resources.Load("2dxfx-icon-size") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Zoom"), new GUIContent("Zoom", icone, "Zoom the shadow effect")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Intensity"), new GUIContent("Intensity", icone, "Active the X mouvement of the cloud")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollX"), new GUIContent("Auto Scroll X", icone, "Change the value of the posterize effect")); + + if (_2dxScript._AutoScrollX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedX"), new GUIContent("Auto Scroll Speed X", icone, "Change the speed of the shadow")); + } + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollY"), new GUIContent("Auto Scroll Y", icone, "Active the Y mouvement of the cloud")); + + if (_2dxScript._AutoScrollY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedY"), new GUIContent("Auto Scroll Speed Y", icone, "Change the speed of the shadow")); + } + EditorGUILayout.EndVertical(); + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SkyCloud.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SkyCloud.cs.meta new file mode 100644 index 00000000..cb5160d7 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_SkyCloud.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f2e52fefaef15324f8dff60418abe38b +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Slim.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Slim.cs new file mode 100644 index 00000000..6ce6febd --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Slim.cs @@ -0,0 +1,511 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Slim")] +[System.Serializable] +public class _2dxFX_AL_Slim : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Slim"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0f, 1f)] public float TurnToSlim = 0.052f; + [HideInInspector] [Range(0.0f, 1f)] public float SlimDistortion = 0.111f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", SlimDistortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + CanvasSpriteRenderer.sharedMaterial.SetFloat("TurnToLiquid", TurnToSlim); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", SlimDistortion); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + CanvasImage.material.SetFloat("TurnToLiquid", TurnToSlim); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Slim)), CanEditMultipleObjects] +public class _2dxFX_AL_Slim_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Slim _2dxScript = (_2dxFX_AL_Slim)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TurnToSlim"), new GUIContent("Turn To Slime", icone, "Turn to slime = 0 = normal sprite : 1 = Slime FX")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("SlimDistortion"), new GUIContent("Slime Distortion", icone, "Change the distortion of the Slime")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Slim.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Slim.cs.meta new file mode 100644 index 00000000..8cff30c2 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Slim.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e9ef33ad8218f994fa6b14cbc08c65fe +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Smoke.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Smoke.cs new file mode 100644 index 00000000..e2efe643 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Smoke.cs @@ -0,0 +1,534 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Smoke")] +[System.Serializable] +public class _2dxFX_AL_Smoke : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Smoke"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(64, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 1)] public float _TurnToSmoke = 0.75f; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + [HideInInspector] public Color _Color1 = new Color(1f, 0f, 1f, 1f); + [HideInInspector] public Color _Color2 = new Color(1f, 1f, 1f, 1f); + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + if (_TurnToSmoke == 1) _TurnToSmoke = 0.995f; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _TurnToSmoke); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color1", _Color1); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color2", _Color2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + if (_TurnToSmoke == 1) _TurnToSmoke = 0.995f; + CanvasImage.material.SetFloat("_Value2", _TurnToSmoke); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + CanvasImage.material.SetColor("_Color1", _Color1); + CanvasImage.material.SetColor("_Color2", _Color2); + } + + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Smoke)), CanEditMultipleObjects] +public class _2dxFX_AL_Smoke_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Smoke _2dxScript = (_2dxFX_AL_Smoke)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_TurnToSmoke"), new GUIContent("Turn To Smoke", icone, "Turn To Smoke Value")); + + EditorGUILayout.PropertyField(m_object.FindProperty("_Color1"), new GUIContent("Smoke Color", icone, "Select the color of the Smoke")); + EditorGUILayout.PropertyField(m_object.FindProperty("_Color2"), new GUIContent("Smoke Color 2", icone, "Select the color of the Smoke")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Smoke.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Smoke.cs.meta new file mode 100644 index 00000000..3f24dcee --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Smoke.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7fb67d2480c22a340bc2c4306ec63a0a +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_StoneFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_StoneFX.cs new file mode 100644 index 00000000..2e3a6bd8 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_StoneFX.cs @@ -0,0 +1,466 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/StoneFX")] +[System.Serializable] +public class _2dxFX_AL_StoneFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/StoneFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 1)] public float IntoStone = 1.0f; + [HideInInspector] [Range(0, 1)] public float Deep = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", IntoStone); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Deep", Deep); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", IntoStone); + CanvasImage.material.SetFloat("_Deep", Deep); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_StoneFX)), CanEditMultipleObjects] +public class _2dxFX_AL_StoneFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_StoneFX _2dxScript = (_2dxFX_AL_StoneFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("IntoStone"), new GUIContent("Into Stone", icone, "Turn into Stone")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Deep"), new GUIContent("Fracture", icone, "Change the fracture of the stone")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_StoneFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_StoneFX.cs.meta new file mode 100644 index 00000000..443fb148 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_StoneFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 642b6e637dff5cc4e96d1b4ee9466cd1 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Threshold.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Threshold.cs new file mode 100644 index 00000000..e66b0222 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Threshold.cs @@ -0,0 +1,459 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Threshold")] +[System.Serializable] +public class _2dxFX_AL_Threshold : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Threshold"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Threshold = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Threshold); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Threshold); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Threshold)), CanEditMultipleObjects] +public class _2dxFX_AL_Threshold_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Threshold _2dxScript = (_2dxFX_AL_Threshold)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Threshold"), new GUIContent("Threshold Value", icone, "Change the value of the Threshold effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Threshold.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Threshold.cs.meta new file mode 100644 index 00000000..9ae3fa24 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Threshold.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f9a37d55c831333429456976eeb78df4 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Twist.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Twist.cs new file mode 100644 index 00000000..dfdef6e1 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Twist.cs @@ -0,0 +1,476 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/Twist")] +[System.Serializable] +public class _2dxFX_AL_Twist : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/Twist"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-1, 1)] public float Distortion = 1.6f; + [HideInInspector] [Range(-1, 2)] public float _PosX = 0.5f; + [HideInInspector] [Range(-1, 2)] public float _PosY = 0.5f; + [HideInInspector] public Color _ColorX = new Color(1f, 1f, 1f, 1f); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_PosX", _PosX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_PosY", _PosY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_PosX", _PosX); + CanvasImage.material.SetFloat("_PosY", _PosY); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_Twist)), CanEditMultipleObjects] +public class _2dxFX_AL_Twist_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_Twist _2dxScript = (_2dxFX_AL_Twist)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion value", icone, "Change the distortion value")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_PosX"), new GUIContent("Position X", icone, "Change the horizontal position")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_PosY"), new GUIContent("Position Y", icone, "Change the vertical position")); + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Twist.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Twist.cs.meta new file mode 100644 index 00000000..de810199 --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_Twist.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 33ecde0e671b2e64d95b292ca2a5eb8c +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_WoodFX.cs b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_WoodFX.cs new file mode 100644 index 00000000..2a22cbad --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_WoodFX.cs @@ -0,0 +1,471 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Advanced Lightning/WoodFX")] +[System.Serializable] +public class _2dxFX_AL_WoodFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + // Advanced Lightning + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public bool AddShadow = true; + [HideInInspector] public bool ReceivedShadow = false; + [HideInInspector] public int BlendMode = 0; + + private string shader = "2DxFX/AL/WoodFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 1)] public float IntoWood = 1.0f; + [HideInInspector] [Range(0, 1)] public float Deep = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (_2DxFX.ActiveShadow && AddShadow) + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + if (ReceivedShadow) + { + CanvasSpriteRenderer.receiveShadows = true; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 2450; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 1); + } + else + { + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + } + else + { + CanvasSpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + CanvasSpriteRenderer.receiveShadows = false; + CanvasSpriteRenderer.sharedMaterial.renderQueue = 3000; + CanvasSpriteRenderer.sharedMaterial.SetInt("_Z", 0); + } + + if (BlendMode == 0) // LetterEntered + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 1) // Additive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 2) // Darken + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + if (BlendMode == 3) // Lighten + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 4) // Linear Burn + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 5) // Linear Dodge + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Max); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 6) // Multiply + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + } + if (BlendMode == 7) // Soft Aditive + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.Add); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.One); + } + if (BlendMode == 8) // 2x Multiplicative + { + CanvasSpriteRenderer.sharedMaterial.SetInt("_BlendOp", (int)UnityEngine.Rendering.BlendOp.ReverseSubtract); + CanvasSpriteRenderer.sharedMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.DstAlpha); + CanvasSpriteRenderer.sharedMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.DstColor); + } + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", IntoWood); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Deep", Deep); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", IntoWood); + CanvasImage.material.SetFloat("_Deep", Deep); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_AL_WoodFX)), CanEditMultipleObjects] +public class _2dxFX_AL_WoodFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_AL_WoodFX _2dxScript = (_2dxFX_AL_WoodFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-al") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("Advanced Lightning may work on mobile high-end devices and may be slower than the Standard 2DxFX effects due to is lightning system. Use it only if you need it.", EditorStyles.helpBox); + EditorGUILayout.PropertyField(m_object.FindProperty("AddShadow"), new GUIContent("Add Shadow", "Use a unique material, reduce drastically the use of draw call")); + if (_2dxScript.AddShadow) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ReceivedShadow"), new GUIContent("Received Shadow : No Transparency and Use Z Buffering instead of Sprite Order Layers", "Received Shadow, No Transparency and Use Z Buffering instead of Sprite Order Layers")); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note 1: Blend Fusion work but without transparency\n", EditorStyles.helpBox); + } + } + + // Mode Blend + string BlendMethode = "LetterEntered"; + + if (_2dxScript.BlendMode == 0) BlendMethode = "LetterEntered"; + if (_2dxScript.BlendMode == 1) BlendMethode = "Additive"; + if (_2dxScript.BlendMode == 2) BlendMethode = "Darken"; + if (_2dxScript.BlendMode == 3) BlendMethode = "Lighten"; + if (_2dxScript.BlendMode == 4) BlendMethode = "Linear Burn"; + if (_2dxScript.BlendMode == 5) BlendMethode = "Linear Dodge"; + if (_2dxScript.BlendMode == 6) BlendMethode = "Multiply"; + if (_2dxScript.BlendMode == 7) BlendMethode = "Soft Aditive"; + if (_2dxScript.BlendMode == 8) BlendMethode = "2x Multiplicative"; + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("IntoWood"), new GUIContent("Into wood", icone, "Turn into wood")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Deep"), new GUIContent("Fracture", icone, "Change the fracture of the stone")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField("Change Blend Fusion = " + BlendMethode, EditorStyles.whiteLargeLabel); + if (_2dxScript.ReceivedShadow) + { + EditorGUILayout.LabelField("Note: Blend Fusion is not working correctly with Received Shadow", EditorStyles.helpBox); + } + + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("LetterEntered", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 0; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Additive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 1; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Darken", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 2; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Lighten", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 3; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Linear Burn", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 4; + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.BeginHorizontal("Box"); + + if (GUILayout.Button("Linear Dodge", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 5; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Multiply", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 6; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("Soft Aditive", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 7; + _2dxScript.CallUpdate(); + } + if (GUILayout.Button("2x Multiplicative", EditorStyles.toolbarButton)) + { + _2dxScript.BlendMode = 8; + _2dxScript.CallUpdate(); + + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_WoodFX.cs.meta b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_WoodFX.cs.meta new file mode 100644 index 00000000..eecfd82d --- /dev/null +++ b/Assets/2DxFX/Scripts/2dxfx_AL/_2dxFX_AL_WoodFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a51e2dac71bac554a9a1b224310859eb +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2DxFX.cs b/Assets/2DxFX/Scripts/_2DxFX.cs new file mode 100644 index 00000000..c4c9abb1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2DxFX.cs @@ -0,0 +1,9 @@ +using UnityEngine; +using System.Collections; + +public class _2DxFX : MonoBehaviour +{ + + public static bool ActiveShadow = true; + +} diff --git a/Assets/2DxFX/Scripts/_2DxFX.cs.meta b/Assets/2DxFX/Scripts/_2DxFX.cs.meta new file mode 100644 index 00000000..85f5c62a --- /dev/null +++ b/Assets/2DxFX/Scripts/_2DxFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6886eace71ef83c469f6d50efde93b68 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_4Gradients.cs b/Assets/2DxFX/Scripts/_2dxFX_4Gradients.cs new file mode 100644 index 00000000..ac6a71c1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_4Gradients.cs @@ -0,0 +1,362 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/4 Gradients")] +[System.Serializable] +public class _2dxFX_4Gradients : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/4Gradients"; + [HideInInspector] public Color _Color1 = new Color(1f, 0f, 0f, 1f); + [HideInInspector] public Color _Color2 = new Color(1f, 1f, 0f, 1f); + [HideInInspector] public Color _Color3 = new Color(0f, 1f, 1f, 1f); + [HideInInspector] public Color _Color4 = new Color(0f, 1f, 0f, 1f); + [Range(0, 1)] [HideInInspector] public float _Alpha = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer; [HideInInspector] public bool ActiveUpdate = true; + + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + if (CanvasSpriteRenderer != null) + { + if (CanvasSpriteRenderer.sharedMaterial.shader.name == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color1", _Color1); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color2", _Color2); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color3", _Color3); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color4", _Color4); + + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_Color1", _Color1); + CanvasImage.material.SetColor("_Color2", _Color2); + CanvasImage.material.SetColor("_Color3", _Color3); + CanvasImage.material.SetColor("_Color4", _Color4); + } + } + + + } + + void OnDestroy() + { + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + } + + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_4Gradients)), CanEditMultipleObjects] +public class _2dxFX_4Gradients_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + + DrawDefaultInspector(); + _2dxFX_4Gradients _2dxScript = (_2dxFX_4Gradients)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript._Color1 = new Color(1, 0, 0, 1); + _2dxScript._Color2 = new Color(0, 0, 1, 1); + _2dxScript._Color3 = new Color(0, 1, 0, 1); + _2dxScript._Color4 = new Color(0, 1, 1, 1); + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-corner-1") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_Color1"), new GUIContent("Upper Left Color", icone, "Select the color from upper left")); + icone = Resources.Load("2dxfx-icon-corner-2") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color2"), new GUIContent("Upper Right Color", icone, "Select the color from upper right")); + icone = Resources.Load("2dxfx-icon-corner-3") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color3"), new GUIContent("Bottom Left Color", icone, "Select the color from Bottom left")); + icone = Resources.Load("2dxfx-icon-corner-4") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color4"), new GUIContent("Bottom Right Color", icone, "Select the color from Bottom right")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + // PRESET FX + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.LabelField(new GUIContent("PRESET FX", "PRESET FX")); + EditorGUILayout.BeginHorizontal("Box"); + Texture2D preview = Resources.Load("2dxfx-p-4g1") as Texture2D; + + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(1, 0, 0, 1); + _2dxScript._Color2 = new Color(0, 0, 1, 1); + _2dxScript._Color3 = new Color(0, 1, 0, 1); + _2dxScript._Color4 = new Color(0, 1, 1, 1); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + + preview = Resources.Load("2dxfx-p-4g2") as Texture2D; + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(0, 1, 0.7f, 0); + _2dxScript._Color2 = new Color(0, 1, 0.7f, 0); + _2dxScript._Color3 = new Color(0, 1, 0.7f, 1); + _2dxScript._Color4 = new Color(0, 1, 0.7f, 1); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + + preview = Resources.Load("2dxfx-p-4g3") as Texture2D; + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(1, 1, 0, 1); + _2dxScript._Color2 = new Color(1, 0.8f, 0, 0); + _2dxScript._Color3 = new Color(1, 0.6f, 0, 0); + _2dxScript._Color4 = new Color(1, 0.6f, 0, 0); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + + preview = Resources.Load("2dxfx-p-4g4") as Texture2D; + if (GUILayout.Button(preview)) + { + _2dxScript._Color1 = new Color(1, 0, 0, 1); + _2dxScript._Color2 = new Color(1, 0, 0, 1); + _2dxScript._Color3 = new Color(1, 0, 0, 0); + _2dxScript._Color4 = new Color(1, 0, 0, 0); + _2dxScript._Alpha = 1; + m_object.ApplyModifiedProperties(); + _2dxScript.CallUpdate(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_4Gradients.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_4Gradients.cs.meta new file mode 100644 index 00000000..2165ad4b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_4Gradients.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2ba34afa98e0da04984137096f98f122 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Additive.cs b/Assets/2DxFX/Scripts/_2dxFX_Additive.cs new file mode 100644 index 00000000..82f5ffe2 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Additive.cs @@ -0,0 +1,288 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Additive")] +[System.Serializable] +public class _2dxFX_Additive : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Additive"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer; + [HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if(CanvasSpriteRenderer != null) dfname=CanvasSpriteRenderer.sharedMaterial.shader.name; + if(CanvasImage != null) + { + Image img = CanvasImage; + if (img.material==null) dfname="Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader=Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if(CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if(CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + } + } + + } + + void OnDestroy() + { + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Additive)),CanEditMultipleObjects] +public class _2dxFX_Additive_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Additive _2dxScript = (_2dxFX_Additive)target; + + + + Texture2D icon = Resources.Load ("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih=icon.height; + float iw=icon.width; + float result=ih/iw; + float w=Screen.width; + result=result*w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r,icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if(GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial= null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField (m_object.FindProperty ("ActiveChange"), new GUIContent ("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load ("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Additive.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Additive.cs.meta new file mode 100644 index 00000000..26bf1601 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Additive.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 48a35bf57b2cb5d4286cfe18078f35dc +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_BlackHole.cs b/Assets/2DxFX/Scripts/_2dxFX_BlackHole.cs new file mode 100644 index 00000000..008d6879 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BlackHole.cs @@ -0,0 +1,322 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Black Hole")] +[System.Serializable] +public class _2dxFX_BlackHole : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/BlackHole"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Color _Color = new Color(1f, 1f, 1f, 1f); + [HideInInspector] [Range(-1, 1)] public float Distortion = 1.6f; + [HideInInspector] [Range(0, 0.5f)] public float _Hole = 0; + [HideInInspector] [Range(-10, 10)] public float Speed = 4; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Hole", _Hole); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_Hole", _Hole); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetColor("_ColorX", _Color); + + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_BlackHole)), CanEditMultipleObjects] +public class _2dxFX_BlackHole_Editor : Editor +{ + private SerializedObject m_object; + + + public void OnEnable() + { + m_object = new SerializedObject(targets); + } + + + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_BlackHole _2dxScript = (_2dxFX_BlackHole)target; + + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion size")); + + icone = Resources.Load("2dxfx-icon-size") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Hole"), new GUIContent("Hole", icone, "Change the size of the hole")); + + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Speed", icone, "Change the speed of the hole")); + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Color", icone, "Change the color of the black hole")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + } + + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_BlackHole.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_BlackHole.cs.meta new file mode 100644 index 00000000..e07f2bca --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BlackHole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c157e859182832f4a990dfa12ed41351 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Blood.cs b/Assets/2DxFX/Scripts/_2dxFX_Blood.cs new file mode 100644 index 00000000..3a8a36a5 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Blood.cs @@ -0,0 +1,331 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Blood")] +[System.Serializable] +public class _2dxFX_Blood : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Blood"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0f, 1f)] public float TurnToBlood = 0.140f; + [HideInInspector] [Range(0.0f, 1f)] public float Blood = 0.141f; + + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + ShaderChange = 0; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Blood); + + CanvasSpriteRenderer.sharedMaterial.SetFloat("TurnToLiquid", TurnToBlood); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Blood); + + CanvasImage.material.SetFloat("TurnToLiquid", TurnToBlood); + } + } + + } + + void OnDestroy() + { + + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Blood)), CanEditMultipleObjects] +public class _2dxFX_Blood_Editor : Editor +{ + private SerializedObject m_object; + + + public void OnEnable() + { + m_object = new SerializedObject(targets); + } + + + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Blood _2dxScript = (_2dxFX_Blood)target; + + + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TurnToBlood"), new GUIContent("Turn To Blood", icone, "Turn to Blood = 0 = normal sprite : 1 = Blood Liquified")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Blood"), new GUIContent("Blood Distortion", icone, "Change the distortion of the blood")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Blood.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Blood.cs.meta new file mode 100644 index 00000000..6ab1b0e1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Blood.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 07ac7fa7466b4da4294c286d0b528e66 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Blur.cs b/Assets/2DxFX/Scripts/_2dxFX_Blur.cs new file mode 100644 index 00000000..930cf6c7 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Blur.cs @@ -0,0 +1,299 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Blur")] +[System.Serializable] +public class _2dxFX_Blur : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Blur"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 10f)] public float Blur = 4.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Blur); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Blur); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Blur)), CanEditMultipleObjects] +public class _2dxFX_Blur_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Blur _2dxScript = (_2dxFX_Blur)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-blur") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Blur"), new GUIContent("Blur", icone, "Change the size of the blur")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Blur.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Blur.cs.meta new file mode 100644 index 00000000..e79eb9c2 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Blur.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 62e1382121f580942b336eae8354701d +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_BlurHQ.cs b/Assets/2DxFX/Scripts/_2dxFX_BlurHQ.cs new file mode 100644 index 00000000..feac0723 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BlurHQ.cs @@ -0,0 +1,299 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Blur HQ")] +[System.Serializable] +public class _2dxFX_BlurHQ : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/BlurHQ"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 10f)] public float Blur = 4.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Blur); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Blur); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_BlurHQ)), CanEditMultipleObjects] +public class _2dxFX_BlurHQ_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_BlurHQ _2dxScript = (_2dxFX_BlurHQ)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-blur") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Blur"), new GUIContent("Blur", icone, "Change the size of the blur")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_BlurHQ.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_BlurHQ.cs.meta new file mode 100644 index 00000000..7a6a190d --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BlurHQ.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fdefb86aec4b4fa4baa98042bbc1a6f5 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_BlurHQX.cs b/Assets/2DxFX/Scripts/_2dxFX_BlurHQX.cs new file mode 100644 index 00000000..ff54b5e3 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BlurHQX.cs @@ -0,0 +1,303 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Blur HQ X")] +[System.Serializable] +public class _2dxFX_BlurHQX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/BlurHQX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 10f)] public float Blur = 4.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Blur); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Blur); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_BlurHQX)), CanEditMultipleObjects] +public class _2dxFX_BlurHQX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_BlurHQX _2dxScript = (_2dxFX_BlurHQX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + //CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + //CanvasSpriteRenderer.sharedMaterial.SetFloat("_Hole", _Hole); + //CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + //CanvasSpriteRenderer.sharedMaterial.SetColor("_Color", _Color); + + Texture2D icone = Resources.Load("2dxfx-icon-blur") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Blur"), new GUIContent("Blur", icone, "Change the size of the blur")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_BlurHQX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_BlurHQX.cs.meta new file mode 100644 index 00000000..48e7cada --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BlurHQX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0b2038115cff7df438309b03b20a5131 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_BurnFX.cs b/Assets/2DxFX/Scripts/_2dxFX_BurnFX.cs new file mode 100644 index 00000000..479970c2 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BurnFX.cs @@ -0,0 +1,297 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/BurnFX")] +[System.Serializable] +public class _2dxFX_BurnFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/BurnFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.001f, 1)] public float Seed = 1.0f; + [HideInInspector] [Range(0, 1)] public float Destroyed = 0.5f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Destroyed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", Seed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Destroyed); + CanvasImage.material.SetFloat("_Size", Seed); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_BurnFX)), CanEditMultipleObjects] +public class _2dxFX_BurnFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_BurnFX _2dxScript = (_2dxFX_BurnFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Destroyed"), new GUIContent("Destroyed Value", icone, "Change the destruction value")); + icone = Resources.Load("2dxfx-icon-seed") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Seed"), new GUIContent("Seed", icone, "Change the random seed")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_BurnFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_BurnFX.cs.meta new file mode 100644 index 00000000..f5632c7e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BurnFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 552baaaa8b27fdb458d47db489b18dab +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_BurningFX.cs b/Assets/2DxFX/Scripts/_2dxFX_BurningFX.cs new file mode 100644 index 00000000..12d46881 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BurningFX.cs @@ -0,0 +1,295 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/BurningFX")] +[System.Serializable] +public class _2dxFX_BurningFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/BurningFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 4)] public float Colors = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Colors); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Colors); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_BurningFX)), CanEditMultipleObjects] +public class _2dxFX_BurningFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_BurningFX _2dxScript = (_2dxFX_BurningFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Colors"), new GUIContent("Color", icone, "Change the color of the sprite")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_BurningFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_BurningFX.cs.meta new file mode 100644 index 00000000..073c4277 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_BurningFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2e987b95c1ff08a40a45962f1a27075b +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Cartoon.cs b/Assets/2DxFX/Scripts/_2dxFX_Cartoon.cs new file mode 100644 index 00000000..19c78951 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Cartoon.cs @@ -0,0 +1,302 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Cartoon")] +[System.Serializable] +public class _2dxFX_Cartoon : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Cartoon"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 6)] public float _ColorLevel = 6f; + [HideInInspector] [Range(0, 1)] public float _EdgeSize = 0.08f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorLevel", _ColorLevel); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_EdgeSize", _EdgeSize); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_ColorLevel", _ColorLevel); + CanvasImage.material.SetFloat("_EdgeSize", _EdgeSize); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Cartoon)), CanEditMultipleObjects] +public class _2dxFX_Cartoon_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Cartoon _2dxScript = (_2dxFX_Cartoon)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorLevel"), new GUIContent("Color Level", icone, "Change the level color of the sprite")); + icone = Resources.Load("2dxfx-icon-edge") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_EdgeSize"), new GUIContent("Edge Size", icone, "Change the size of the black lines")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Cartoon.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Cartoon.cs.meta new file mode 100644 index 00000000..04162185 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Cartoon.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b8e9905a8d6f8584494ec6e19e049624 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_CircleFade.cs b/Assets/2DxFX/Scripts/_2dxFX_CircleFade.cs new file mode 100644 index 00000000..d50c9753 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_CircleFade.cs @@ -0,0 +1,308 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/CircleFade")] +[System.Serializable] +public class _2dxFX_CircleFade : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/CircleFade"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-0.2f, 1f)] public float _Offset = 0.2f; + [HideInInspector] [Range(0, 1)] public int _InOut = 0; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + CanvasSpriteRenderer.sharedMaterial.SetInt("_InOut", _InOut); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Offset", _Offset); + CanvasImage.material.SetInt("_InOut", _InOut); + + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_CircleFade)), CanEditMultipleObjects] +public class _2dxFX_CircleFade_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_CircleFade _2dxScript = (_2dxFX_CircleFade)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-size") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Color Level", icone, "Change the level color of the sprite")); + + icone = Resources.Load("2dxfx-icon-inout") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_InOut"), new GUIContent("Switch In or Out", icone, "Hole Inside or Outside")); + + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_CircleFade.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_CircleFade.cs.meta new file mode 100644 index 00000000..10b8739e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_CircleFade.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 14764895ad4d9354385a82af09b83dc1 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Clipping.cs b/Assets/2DxFX/Scripts/_2dxFX_Clipping.cs new file mode 100644 index 00000000..4d051b02 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Clipping.cs @@ -0,0 +1,329 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Clipping")] +[System.Serializable] +public class _2dxFX_Clipping : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Clipping"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0f, 1f)] public float _ClipLeft = 0f; + [HideInInspector] [Range(0f, 1f)] public float _ClipRight = 0f; + [HideInInspector] [Range(0f, 1f)] public float _ClipUp = 0f; + [HideInInspector] [Range(0f, 1f)] public float _ClipDown = 0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if(CanvasSpriteRenderer != null) dfname=CanvasSpriteRenderer.sharedMaterial.shader.name; + if(CanvasImage != null) + { + Image img = CanvasImage; + if (img.material==null) dfname="Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader=Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if(CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if(CanvasImage != null) + { + Image img = CanvasImage; + if (img.material==null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipDown", 1 - _ClipDown); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasImage.material.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasImage.material.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasImage.material.SetFloat("_ClipDown", 1 - _ClipDown); + + } + } + + } + + void OnDestroy() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Clipping)),CanEditMultipleObjects] +public class _2dxFX_Clipping_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Clipping _2dxScript = (_2dxFX_Clipping)target; + + Texture2D icon = Resources.Load ("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih=icon.height; + float iw=icon.width; + float result=ih/iw; + float w=Screen.width; + result=result*w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r,icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if(GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial= null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField (m_object.FindProperty ("ActiveChange"), new GUIContent ("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load ("2dxfx-icon-clip_left") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipLeft"), new GUIContent("Clipping Left", icone, "Clipping Left")); + + icone = Resources.Load ("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipRight"), new GUIContent("Clipping Right", icone, "Clipping Right")); + + icone = Resources.Load ("2dxfx-icon-clip_up") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipUp"), new GUIContent("Clipping Up", icone, "Clipping Up")); + + icone = Resources.Load ("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipDown"), new GUIContent("Clipping Down", icone, "Clipping Down")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load ("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Clipping.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Clipping.cs.meta new file mode 100644 index 00000000..b168950c --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Clipping.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4ee0f73377eaa3449a308aad97d79e1a +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Color.cs b/Assets/2DxFX/Scripts/_2dxFX_Color.cs new file mode 100644 index 00000000..7b53e307 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Color.cs @@ -0,0 +1,309 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Color")] +[System.Serializable] +public class _2dxFX_Color : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Color"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if(CanvasSpriteRenderer != null) dfname=CanvasSpriteRenderer.sharedMaterial.shader.name; + if(CanvasImage != null) + { + Image img = CanvasImage; + if (img.material==null) dfname="Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader=Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if(CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if(CanvasImage != null) + { + Image img = CanvasImage; + if (img.material==null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _Color); + } + } + + } + + void OnDestroy() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + if (this.gameObject.GetComponent() != null) + { + if (CanvasImage == null) CanvasImage = this.gameObject.GetComponent(); + } + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Color)),CanEditMultipleObjects] +public class _2dxFX_Color_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Color _2dxScript = (_2dxFX_Color)target; + + Texture2D icon = Resources.Load ("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih=icon.height; + float iw=icon.width; + float result=ih/iw; + float w=Screen.width; + result=result*w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r,icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if(GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial= null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField (m_object.FindProperty ("ActiveChange"), new GUIContent ("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load ("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Change into Color", icone, "To the sprite into the selected color")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load ("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Color.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Color.cs.meta new file mode 100644 index 00000000..2285f98f --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Color.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 68f645ec4b7575a459c4b2b20e4f0062 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_ColorChange.cs b/Assets/2DxFX/Scripts/_2dxFX_ColorChange.cs new file mode 100644 index 00000000..65ca145e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_ColorChange.cs @@ -0,0 +1,320 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/ColorChange")] +[System.Serializable] +public class _2dxFX_ColorChange : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + + private string shader = "2DxFX/Standard/ColorChange"; + + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float _Tolerance = 1f; + [HideInInspector] [Range(0, 360)] public float _HueShift = 180f; + [HideInInspector] [Range(-2, 2)] public float _Saturation = 1f; + [HideInInspector] [Range(-2, 2)] public float _ValueBrightness = 1f; + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Tolerance", _Tolerance); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_HueShift", _HueShift); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Sat", _Saturation); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Val", _ValueBrightness); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _Color); + CanvasImage.material.SetFloat("_Tolerance", _Tolerance); + CanvasImage.material.SetFloat("_HueShift", _HueShift); + CanvasImage.material.SetFloat("_Sat", _Saturation); + CanvasImage.material.SetFloat("_Val", _ValueBrightness); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_ColorChange)), CanEditMultipleObjects] +public class _2dxFX_ColorChange_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_ColorChange _2dxScript = (_2dxFX_ColorChange)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_HueShift"), new GUIContent("Change Hue", icone, "Change the color from the Selected Color")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Selected Color", icone, "Pick up a color")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Tolerance"), new GUIContent("Tolerance", icone, "the tolerance of the selected color")); + icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Saturation"), new GUIContent("Color Saturation", icone, "Change the saturation")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ValueBrightness"), new GUIContent("Brighntess", icone, "Change the brightness")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_ColorChange.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_ColorChange.cs.meta new file mode 100644 index 00000000..a1b1d194 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_ColorChange.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b2c315c7ef0836841b9a78876cdfb259 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_ColorRGB.cs b/Assets/2DxFX/Scripts/_2dxFX_ColorRGB.cs new file mode 100644 index 00000000..b3080631 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_ColorRGB.cs @@ -0,0 +1,310 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/ColorRGB")] +[System.Serializable] +public class _2dxFX_ColorRGB : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/ColorRGB"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-1, 1)] public float _ColorR = -0.5f; + [HideInInspector] [Range(-1, 1)] public float _ColorG = 0.5f; + [HideInInspector] [Range(-1, 1)] public float _ColorB = 0.5f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorR", _ColorR); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorG", _ColorG); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ColorB", _ColorB); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_ColorR", _ColorR); + CanvasImage.material.SetFloat("_ColorG", _ColorG); + CanvasImage.material.SetFloat("_ColorB", _ColorB); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() +{ + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } +} + +void OnEnable() +{ + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + +} +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_ColorRGB)), CanEditMultipleObjects] +public class _2dxFX_ColorRGB_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_ColorRGB _2dxScript = (_2dxFX_ColorRGB)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-red") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorR"), new GUIContent("Red Property", icone, "Change the red value")); + icone = Resources.Load("2dxfx-icon-green") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorG"), new GUIContent("Green Property", icone, "Change the green value")); + icone = Resources.Load("2dxfx-icon-blue") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorB"), new GUIContent("Blue Property", icone, "Change the blue value")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_ColorRGB.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_ColorRGB.cs.meta new file mode 100644 index 00000000..0217316f --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_ColorRGB.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3d1f3183e74f9c74895e0e5ecc62b35d +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_CompressionFX.cs b/Assets/2DxFX/Scripts/_2dxFX_CompressionFX.cs new file mode 100644 index 00000000..dd553f18 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_CompressionFX.cs @@ -0,0 +1,299 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/CompressionFX")] +[System.Serializable] +public class _2dxFX_CompressionFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/CompressionFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(1, 128)] public float Parasite = 64.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Parasite); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Parasite); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_CompressionFX)), CanEditMultipleObjects] +public class _2dxFX_CompressionFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_CompressionFX _2dxScript = (_2dxFX_CompressionFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Parasite"), new GUIContent("Parasite Value", icone, "Change the size of the parasite FX")); + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_CompressionFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_CompressionFX.cs.meta new file mode 100644 index 00000000..bca91b4d --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_CompressionFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 27eccc971f20d0b44bb55c479fc45046 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_DesintegrationFX.cs b/Assets/2DxFX/Scripts/_2dxFX_DesintegrationFX.cs new file mode 100644 index 00000000..c7edb964 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_DesintegrationFX.cs @@ -0,0 +1,309 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/DesintegrationFX")] +[System.Serializable] +public class _2dxFX_DesintegrationFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/DesintegrationFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + [HideInInspector] [Range(0, 1)] public float Seed = 1.0f; + [HideInInspector] [Range(0, 1)] public float Desintegration = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Desintegration); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", Seed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Desintegration); + CanvasImage.material.SetColor("_ColorX", _Color); + CanvasImage.material.SetFloat("_Size", Seed); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_DesintegrationFX)), CanEditMultipleObjects] +public class _2dxFX_DesintegrationFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_DesintegrationFX _2dxScript = (_2dxFX_DesintegrationFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Desintegration"), new GUIContent("Desintegration Value", icone, "Change the desintragration value")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Change the Color", icone, "Change the color the sprite")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Seed"), new GUIContent("Seed", icone, "Change the random seed")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_DesintegrationFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_DesintegrationFX.cs.meta new file mode 100644 index 00000000..689473ee --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_DesintegrationFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cc772dc55b5b56d49bd030f35e5f7f35 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_DestroyedFX.cs b/Assets/2DxFX/Scripts/_2dxFX_DestroyedFX.cs new file mode 100644 index 00000000..151658e4 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_DestroyedFX.cs @@ -0,0 +1,303 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/DestroyedFX")] +[System.Serializable] +public class _2dxFX_DestroyedFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/DestroyedFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.001f, 1)] public float Seed = 1.0f; + [HideInInspector] [Range(0, 1)] public float Destroyed = 0.5f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Destroyed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", Seed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Destroyed); + CanvasImage.material.SetFloat("_Size", Seed); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_DestroyedFX)), CanEditMultipleObjects] +public class _2dxFX_DestroyedFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_DestroyedFX _2dxScript = (_2dxFX_DestroyedFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Destroyed"), new GUIContent("Destroyed Value", icone, "Change the destruction value")); + icone = Resources.Load("2dxfx-icon-seed") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Seed"), new GUIContent("Seed", icone, "Change the random seed")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_DestroyedFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_DestroyedFX.cs.meta new file mode 100644 index 00000000..4d4fd0c2 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_DestroyedFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c5d453a206e2a154495150809124168f +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Distortion.cs b/Assets/2DxFX/Scripts/_2dxFX_Distortion.cs new file mode 100644 index 00000000..1141fdca --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Distortion.cs @@ -0,0 +1,363 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Distortion")] +[System.Serializable] +public class _2dxFX_Distortion : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Distortion"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetX = 10f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetY = 10f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceX = 0.03f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceY = 0.03f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeX = 0.16f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeY = 0.12f; + [HideInInspector] public bool AutoPlayWaveX = false; + [HideInInspector] [Range(0f, 5f)] public float AutoPlaySpeedX = 5f; + [HideInInspector] public bool AutoPlayWaveY = false; + [HideInInspector] [Range(0f, 50f)] public float AutoPlaySpeedY = 5f; + [HideInInspector] public bool AutoRandom = false; + [HideInInspector] [Range(0f, 50f)] public float AutoRandomRange = 10f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceX", _DistanceX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceY", _DistanceY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeY", _WaveTimeY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + CanvasImage.material.SetFloat("_DistanceX", _DistanceX); + CanvasImage.material.SetFloat("_DistanceY", _DistanceY); + CanvasImage.material.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasImage.material.SetFloat("_WaveTimeY", _WaveTimeY); + } + + float timerange; + if (AutoRandom) + { + timerange = (Random.Range(1, AutoRandomRange) / 5) * Time.deltaTime; + } + else + { + timerange = Time.deltaTime; + } + + if (AutoPlayWaveX) _WaveTimeX += AutoPlaySpeedX * timerange; + if (AutoPlayWaveY) _WaveTimeY += AutoPlaySpeedY * timerange; + if (_WaveTimeX > 6.28f) _WaveTimeX = 0f; + if (_WaveTimeY > 6.28f) _WaveTimeY = 0f; + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Distortion)), CanEditMultipleObjects] +public class _2dxFX_Distortion_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Distortion _2dxScript = (_2dxFX_Distortion)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset of X")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset of Y")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceX"), new GUIContent("Distance X", icone, "Change the distance of X")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceY"), new GUIContent("Distance Y", icone, "Change the distance of Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeX"), new GUIContent("Wave Time X", icone, "Change the time speed of the wave X")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeY"), new GUIContent("Wave Time Y", icone, "Change the time speed of the wave Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveX"), new GUIContent("Active AutoPlay Wave X", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedX"), new GUIContent("AutoPlay Speed X", icone, "Speed of the auto play X")); + } + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveY"), new GUIContent("Active AutoPlay Wave Y", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedY"), new GUIContent("AutoPlay Speed Y", icone, "Speed of the auto play Y")); + } + icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandom"), new GUIContent("Auto Random", icone, "Active the random value")); + if (_2dxScript.AutoRandom) + { + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandomRange"), new GUIContent("Auto Random Range", icone, "Change the random value")); + } + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Distortion.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Distortion.cs.meta new file mode 100644 index 00000000..07a7ef62 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Distortion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0fba1342152bbce4e80b05d5c75f4dd8 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Distortion_Additive.cs b/Assets/2DxFX/Scripts/_2dxFX_Distortion_Additive.cs new file mode 100644 index 00000000..88fb08f7 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Distortion_Additive.cs @@ -0,0 +1,359 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Distortion_Additive")] +[System.Serializable] +public class _2dxFX_Distortion_Additive : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Distortion_Additive"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetX = 10f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetY = 10f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceX = 0.03f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceY = 0.03f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeX = 0.16f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeY = 0.12f; + [HideInInspector] public bool AutoPlayWaveX = false; + [HideInInspector] [Range(0f, 5f)] public float AutoPlaySpeedX = 5f; + [HideInInspector] public bool AutoPlayWaveY = false; + [HideInInspector] [Range(0f, 50f)] public float AutoPlaySpeedY = 5f; + [HideInInspector] public bool AutoRandom = false; + [HideInInspector] [Range(0f, 50f)] public float AutoRandomRange = 10f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceX", _DistanceX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceY", _DistanceY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeY", _WaveTimeY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + CanvasImage.material.SetFloat("_DistanceX", _DistanceX); + CanvasImage.material.SetFloat("_DistanceY", _DistanceY); + CanvasImage.material.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasImage.material.SetFloat("_WaveTimeY", _WaveTimeY); + } + + float timerange; + if (AutoRandom) + { + timerange = (Random.Range(1, AutoRandomRange) / 5) * Time.deltaTime; + } + else + { + timerange = Time.deltaTime; + } + + if (AutoPlayWaveX) _WaveTimeX += AutoPlaySpeedX * timerange; + if (AutoPlayWaveY) _WaveTimeY += AutoPlaySpeedY * timerange; + if (_WaveTimeX > 6.28f) _WaveTimeX = 0f; + if (_WaveTimeY > 6.28f) _WaveTimeY = 0f; + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Distortion_Additive)), CanEditMultipleObjects] +public class _2dxFX_Distortion_Additive_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Distortion_Additive _2dxScript = (_2dxFX_Distortion_Additive)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset of X")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset of Y")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceX"), new GUIContent("Distance X", icone, "Change the distance of X")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceY"), new GUIContent("Distance Y", icone, "Change the distance of Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeX"), new GUIContent("Wave Time X", icone, "Change the time speed of the wave X")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeY"), new GUIContent("Wave Time Y", icone, "Change the time speed of the wave Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveX"), new GUIContent("Active AutoPlay Wave X", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedX"), new GUIContent("AutoPlay Speed X", icone, "Speed of the auto play X")); + } + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveY"), new GUIContent("Active AutoPlay Wave Y", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedY"), new GUIContent("AutoPlay Speed Y", icone, "Speed of the auto play Y")); + } + icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandom"), new GUIContent("Auto Random", icone, "Active the random value")); + if (_2dxScript.AutoRandom) + { + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandomRange"), new GUIContent("Auto Random Range", icone, "Change the random value")); + } + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Distortion_Additive.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Distortion_Additive.cs.meta new file mode 100644 index 00000000..450f761f --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Distortion_Additive.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 856121a8e7bba6d40b9f09fd2d08e3da +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_EdgeColor.cs b/Assets/2DxFX/Scripts/_2dxFX_EdgeColor.cs new file mode 100644 index 00000000..8c629b45 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_EdgeColor.cs @@ -0,0 +1,299 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/EdgeColor")] +[System.Serializable] +public class _2dxFX_EdgeColor : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/EdgeColor"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] public Color _Color = new Color(0f, 1f, 1f, 1f); + + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _Color); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _Color); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_EdgeColor)), CanEditMultipleObjects] +public class _2dxFX_EdgeColor_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_EdgeColor _2dxScript = (_2dxFX_EdgeColor)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Edge Color", icone, "Change the Edge Color")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_EdgeColor.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_EdgeColor.cs.meta new file mode 100644 index 00000000..10c4fcfc --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_EdgeColor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5b2d233f2f94c9541945c2d0e9d1d813 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_EnergyBar.cs b/Assets/2DxFX/Scripts/_2dxFX_EnergyBar.cs new file mode 100644 index 00000000..925d389e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_EnergyBar.cs @@ -0,0 +1,334 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/EnergyBar")] +[System.Serializable] +public class _2dxFX_EnergyBar : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/EnergyBar"; + + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 1f)] public float BarProgress = 0.5f; + [HideInInspector] [Range(0.9f, 1f)] public float _Value2 = 0.975f; + [HideInInspector] [Range(0f, 0.5f)] public float _Value3 = 0.5f; + [HideInInspector] [Range(0f, 1f)] public float _Value4 = 1.0f; + [HideInInspector] [Range(0f, 1f)] public float _Value5 = 0.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if (BarProgress > 1) BarProgress = 1; + if (BarProgress < 0) BarProgress = 0; + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", BarProgress); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", 1 - _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", 1 - _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value5", _Value5); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", BarProgress); + CanvasImage.material.SetFloat("_Value2", 1 - _Value2); + CanvasImage.material.SetFloat("_Value3", 1 - _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + CanvasImage.material.SetFloat("_Value5", _Value5); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + + + + + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_EnergyBar)), CanEditMultipleObjects] +public class _2dxFX_EnergyBar_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_EnergyBar _2dxScript = (_2dxFX_EnergyBar)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("BarProgress"), new GUIContent("Energy Bar", icone, "Change the energy bar value from 0 to 1")); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Smooth Line", icone, "Smooth Line")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value3"), new GUIContent("Darker Value", icone, "Darker Value")); + + + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value4"), new GUIContent("Energy RED DANGER", icone, "Use the color energy red danger status, 0 = none / 1 = red")); + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value5"), new GUIContent("Transparency Dark", icone, "Fade of the transparency dark")); + + + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_EnergyBar.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_EnergyBar.cs.meta new file mode 100644 index 00000000..cc2df74a --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_EnergyBar.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fa27d82fe09f21148a8a51d442e9f99b +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Fire.cs b/Assets/2DxFX/Scripts/_2dxFX_Fire.cs new file mode 100644 index 00000000..c7ac328d --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Fire.cs @@ -0,0 +1,356 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Fire")] +[System.Serializable] +public class _2dxFX_Fire : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Fire"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(64, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + private void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Fire)), CanEditMultipleObjects] +public class _2dxFX_Fire_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Fire _2dxScript = (_2dxFX_Fire)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Fire Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Fire Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Fire.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Fire.cs.meta new file mode 100644 index 00000000..f481d74d --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Fire.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8d493b63150be1c429f3d01d00318de0 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_FireAdditive.cs b/Assets/2DxFX/Scripts/_2dxFX_FireAdditive.cs new file mode 100644 index 00000000..396bd7a1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_FireAdditive.cs @@ -0,0 +1,369 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/FireAdditive")] +[System.Serializable] +public class _2dxFX_FireAdditive : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/FireAdditive"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(64, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + + + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_FireAdditive)), CanEditMultipleObjects] +public class _2dxFX_FireAdditive_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_FireAdditive _2dxScript = (_2dxFX_FireAdditive)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Fire Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Fire Intensity", icone, "Change the fire light intensity")); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value3"), new GUIContent("Fade Inside", icone, "Change the inside sprite fade value")); + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_FireAdditive.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_FireAdditive.cs.meta new file mode 100644 index 00000000..705a9e33 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_FireAdditive.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d991cbedd00473c468099b6a782f08ac +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Flame.cs b/Assets/2DxFX/Scripts/_2dxFX_Flame.cs new file mode 100644 index 00000000..037055a6 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Flame.cs @@ -0,0 +1,334 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Flame")] +[System.Serializable] +public class _2dxFX_Flame : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Flame"; + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(-2f, 2f)] public float _Speed = 1f; + [HideInInspector] [Range(0f, 2f)] public float _Intensity = 1f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", _Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Intensity", _Intensity); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", _Alpha); + CanvasImage.material.SetFloat("_Intensity", _Intensity); + CanvasImage.material.SetFloat("_Speed", _Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Flame)), CanEditMultipleObjects] +public class _2dxFX_Flame_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Flame _2dxScript = (_2dxFX_Flame)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Speed"), new GUIContent("Speed", icone, "Change the speed of the flame")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Intensity"), new GUIContent("_Intensity", icone, "Change the speed of the flame")); + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Flame.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Flame.cs.meta new file mode 100644 index 00000000..5e0b5d62 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Flame.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d1e53c10b5275bc4b81baecd9d5a7bd4 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_FlameAdditive.cs b/Assets/2DxFX/Scripts/_2dxFX_FlameAdditive.cs new file mode 100644 index 00000000..6e8453c3 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_FlameAdditive.cs @@ -0,0 +1,346 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Flame Additive")] +[System.Serializable] +public class _2dxFX_FlameAdditive : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/FlameAdditive"; + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(-2f, 2f)] public float _Speed = 1f; + [HideInInspector] [Range(0f, 2f)] public float _Intensity = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + SpriteRenderer CanvasSpriteRenderer; [HideInInspector] public bool ActiveUpdate = true; + Image CanvasImage; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + else if (CanvasImage != null) CanvasImage.material = ForceMaterial; + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if(CanvasSpriteRenderer != null) dfname= CanvasSpriteRenderer.sharedMaterial.shader.name; + if(CanvasImage != null) + { + Image img = CanvasImage; + if (img.material==null) dfname="Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader=Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load ("_2dxFX_FlameTXT") as Texture2D; + if(CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture ("_MainTex2", __MainTex2); + } + else if(CanvasImage != null) + { + Image img = CanvasImage; + if (img.material==null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture ("_MainTex2", __MainTex2); + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", _Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Intensity", _Intensity); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", _Alpha); + CanvasImage.material.SetFloat("_Intensity", _Intensity); + CanvasImage.material.SetFloat("_Speed", _Speed); + } + + } + + } + + void OnDestroy() + { + /* + if (CanvasImage != null) + { + if (CanvasImage==null) CanvasImage = this.gameObject.GetComponent (); + } + */ + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + /* + if (CanvasImage () != null) + { + if (CanvasImage==null) CanvasImage = this.gameObject.GetComponent (); + } + */ + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + /* + if (CanvasImage != null) + { + if (CanvasImage==null) CanvasImage = this.gameObject.GetComponent (); + } + */ + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + } + + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FlameTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_FlameAdditive)),CanEditMultipleObjects] +public class _2dxFX_FlameAdditive_Editor : Editor +{ + + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_FlameAdditive _2dxScript = (_2dxFX_FlameAdditive)target; + + Texture2D icon = Resources.Load ("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih=icon.height; + float iw=icon.width; + float result=ih/iw; + float w=Screen.width; + result=result*w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r,icon); + } + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); + + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if(GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial= null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField (m_object.FindProperty ("ActiveChange"), new GUIContent ("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load ("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Speed"), new GUIContent("Speed", icone, "Change the speed of the flame")); + icone = Resources.Load ("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Intensity"), new GUIContent("_Intensity", icone, "Change the speed of the flame")); + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load ("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_FlameAdditive.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_FlameAdditive.cs.meta new file mode 100644 index 00000000..2a5948b5 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_FlameAdditive.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4caf66f6360a8be448f33223f8153c42 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Frozen.cs b/Assets/2DxFX/Scripts/_2dxFX_Frozen.cs new file mode 100644 index 00000000..4e40931d --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Frozen.cs @@ -0,0 +1,356 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Frozen")] +[System.Serializable] +public class _2dxFX_Frozen : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Frozen"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Value1 = 0.5f; + [HideInInspector] [Range(0, 1)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FrozenTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Frozen)), CanEditMultipleObjects] +public class _2dxFX_Frozen_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Frozen _2dxScript = (_2dxFX_Frozen)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Frozen Speed", icone, "Change the Frozen speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Frozen Intensity", icone, "Change the Frozen light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Frozen.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Frozen.cs.meta new file mode 100644 index 00000000..99ae3528 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Frozen.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 06fdce9d336afa142a1a3d7401c5cf40 +timeCreated: 1529660389 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Ghost.cs b/Assets/2DxFX/Scripts/_2dxFX_Ghost.cs new file mode 100644 index 00000000..12e5677e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Ghost.cs @@ -0,0 +1,323 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Ghost")] +[System.Serializable] +public class _2dxFX_Ghost : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Ghost"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0f, 1f)] public float _offset = 0.4f; + [HideInInspector] [Range(0f, 1f)] public float _ClipLeft = 0.4f; + [HideInInspector] [Range(0f, 1f)] public float _ClipRight = 0.2f; + [HideInInspector] [Range(0f, 1f)] public float _ClipUp = 0.1f; + [HideInInspector] [Range(0f, 1f)] public float _ClipDown = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ClipDown", 1 - _ClipDown); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_offset", _offset); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_ClipLeft", 1 - _ClipLeft); + CanvasImage.material.SetFloat("_ClipRight", 1 - _ClipRight); + CanvasImage.material.SetFloat("_ClipUp", 1 - _ClipUp); + CanvasImage.material.SetFloat("_ClipDown", 1 - _ClipDown); + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_offset", _offset); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + } + void OnDisable() + { + + + if (gameObject.activeSelf && defaultMaterial != null) + { + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Ghost)), CanEditMultipleObjects] +public class _2dxFX_Ghost_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Ghost _2dxScript = (_2dxFX_Ghost)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_offset"), new GUIContent("Smoothness", icone, "Change the side smooth")); + + icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipLeft"), new GUIContent("Clip Left", icone, "Left Fade")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipRight"), new GUIContent("Clip Right", icone, "Right Fade")); + icone = Resources.Load("2dxfx-icon-clip_up") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipUp"), new GUIContent("Clip Up", icone, "Up Fade")); + icone = Resources.Load("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ClipDown"), new GUIContent("Clip Down", icone, "Down Fade")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Ghost.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Ghost.cs.meta new file mode 100644 index 00000000..58a155f1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Ghost.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9bb6c180ca028584888d336317f66fb6 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_GoldFX.cs b/Assets/2DxFX/Scripts/_2dxFX_GoldFX.cs new file mode 100644 index 00000000..d21a292c --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GoldFX.cs @@ -0,0 +1,295 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/GoldFX")] +[System.Serializable] +public class _2dxFX_GoldFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/GoldFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 4f)] public float Gold = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Gold); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Gold); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_GoldFX)), CanEditMultipleObjects] +public class _2dxFX_GoldFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_GoldFX _2dxScript = (_2dxFX_GoldFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Gold"), new GUIContent("Gold Value", icone, "Turn your sprite into a golden sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_GoldFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_GoldFX.cs.meta new file mode 100644 index 00000000..3ef53144 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GoldFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ffd018828d6f5ec4ba743658e129a408 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_GoldenFX.cs b/Assets/2DxFX/Scripts/_2dxFX_GoldenFX.cs new file mode 100644 index 00000000..41c949c6 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GoldenFX.cs @@ -0,0 +1,297 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/GoldenFX")] +[System.Serializable] +public class _2dxFX_GoldenFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/GoldenFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 4f)] public float Golden = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Golden); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Golden); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_GoldenFX)), CanEditMultipleObjects] +public class _2dxFX_GoldenFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_GoldenFX _2dxScript = (_2dxFX_GoldenFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Golden"), new GUIContent("Gold Value", icone, "Turn your sprite into a golden sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_GoldenFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_GoldenFX.cs.meta new file mode 100644 index 00000000..29ad995b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GoldenFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b6cae330cfb005540b96e39801ac739c +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_GrassFX.cs b/Assets/2DxFX/Scripts/_2dxFX_GrassFX.cs new file mode 100644 index 00000000..83460a2b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GrassFX.cs @@ -0,0 +1,418 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/GrassFX")] +[System.Serializable] +public class _2dxFX_GrassFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/GrassFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + private AnimationCurve Wind; + private float WindTime1 = 0; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + + // VS AnimationCurve To C# for Wind + // Put this code on 'Normal' or 'Awake' fonction + + Wind = new AnimationCurve(); + Wind.AddKey(0, 0); + Wind.keys[0].inTangent = 0f; + Wind.keys[0].outTangent = 0f; + + Wind.AddKey(0.1004994f, 0.06637689f); + Wind.keys[1].inTangent = 0f; + Wind.keys[1].outTangent = 0f; + + Wind.AddKey(0.2430963f, -0.06465532f); + Wind.keys[2].inTangent = -0.07599592f; + Wind.keys[2].outTangent = -0.07599592f; + + Wind.AddKey(0.3425266f, 0.02290122f); + Wind.keys[3].inTangent = 0.03580004f; + Wind.keys[3].outTangent = 0.03580004f; + + Wind.AddKey(0.4246872f, -0.02232522f); + Wind.keys[4].inTangent = -0.006025657f; + Wind.keys[4].outTangent = -0.006025657f; + + Wind.AddKey(0.5104106f, 0.1647801f); + Wind.keys[5].inTangent = 0.02981164f; + Wind.keys[5].outTangent = 0.02981164f; + + Wind.AddKey(0.6082056f, -0.04679203f); + Wind.keys[6].inTangent = -0.3176928f; + Wind.keys[6].outTangent = -0.3176928f; + + Wind.AddKey(0.7794942f, 0.2234365f); + Wind.keys[7].inTangent = 0.2063811f; + Wind.keys[7].outTangent = 0.2063811f; + + Wind.AddKey(0.8546611f, -0.003165513f); + Wind.keys[8].inTangent = 0.02264977f; + Wind.keys[8].outTangent = 0.02264977f; + + Wind.AddKey(1.022495f, -0.07358052f); + Wind.keys[9].inTangent = 2.450916f; + Wind.keys[9].outTangent = 2.450916f; + + Wind.AddKey(1.250894f, -0.1813075f); + Wind.keys[10].inTangent = 0.02214685f; + Wind.keys[10].outTangent = 0.02214685f; + + Wind.AddKey(1.369877f, -0.06861454f); + Wind.keys[11].inTangent = -1.860534f; + Wind.keys[11].outTangent = -1.860534f; + + Wind.AddKey(1.484951f, -0.1543293f); + Wind.keys[12].inTangent = 0.0602752f; + Wind.keys[12].outTangent = 0.0602752f; + + Wind.AddKey(1.583562f, 0.100938f); + Wind.keys[13].inTangent = 0.08665025f; + Wind.keys[13].outTangent = 0.08665025f; + + Wind.AddKey(1.687307f, -0.100769f); + Wind.keys[14].inTangent = 0.01110137f; + Wind.keys[14].outTangent = 0.01110137f; + + Wind.AddKey(1.797593f, 0.04921142f); + Wind.keys[15].inTangent = 3.407104f; + Wind.keys[15].outTangent = 3.407104f; + + Wind.AddKey(1.927248f, -0.1877219f); + Wind.keys[16].inTangent = -0.001117587f; + Wind.keys[16].outTangent = -0.001117587f; + + Wind.AddKey(2.067694f, 0.2742145f); + Wind.keys[17].inTangent = 4.736587f; + Wind.keys[17].outTangent = 4.736587f; + + Wind.AddKey(2.184602f, -0.06127208f); + Wind.keys[18].inTangent = -0.1308322f; + Wind.keys[18].outTangent = -0.1308322f; + + Wind.AddKey(2.305948f, 0.1891117f); + Wind.keys[19].inTangent = 0.04030764f; + Wind.keys[19].outTangent = 0.04030764f; + + Wind.AddKey(2.428946f, -0.1695723f); + Wind.keys[20].inTangent = -0.2463162f; + Wind.keys[20].outTangent = -0.2463162f; + + Wind.AddKey(2.55922f, 0.0359862f); + Wind.keys[21].inTangent = 0.3967434f; + Wind.keys[21].outTangent = 0.3967434f; + + Wind.AddKey(2.785119f, -0.08398628f); + Wind.keys[22].inTangent = -0.2388284f; + Wind.keys[22].outTangent = -0.2388284f; + + Wind.AddKey(3f, 0f); + Wind.keys[23].inTangent = 0f; + Wind.keys[23].outTangent = 0f; + + Wind.postWrapMode = WrapMode.Loop; + Wind.preWrapMode = WrapMode.Loop; + + + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + WindTime1 += (Time.deltaTime / 8) * Speed; + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasImage.material.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + CanvasImage.material.SetFloat("_Speed", Speed); + WindTime1 += (Time.deltaTime / 8) * Speed; + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + WindTime1 = 0; + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_GrassFX)), CanEditMultipleObjects] +public class _2dxFX_GrassFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_GrassFX _2dxScript = (_2dxFX_GrassFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Heat Distortion", icone, "Change the distortion of the heat")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_GrassFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_GrassFX.cs.meta new file mode 100644 index 00000000..3efbbf69 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GrassFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: af3c85573658fc74481129cf99207f51 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_GrassMultiFX.cs b/Assets/2DxFX/Scripts/_2dxFX_GrassMultiFX.cs new file mode 100644 index 00000000..f1e82789 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GrassMultiFX.cs @@ -0,0 +1,431 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/GrassMultiFX")] +[System.Serializable] +public class _2dxFX_GrassMultiFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/GrassMultiFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + private AnimationCurve Wind; + private float WindTime1 = 0; + private float WindTime2 = 0.015f; + private float WindTime3 = 0.030f; + private float WindTime4 = 0.045f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + + + ShaderChange = 0; + + // VS AnimationCurve To C# for Wind + // Put this code on 'Normal' or 'Awake' fonction + + Wind = new AnimationCurve(); + Wind.AddKey(0, 0); + Wind.keys[0].inTangent = 0f; + Wind.keys[0].outTangent = 0f; + + Wind.AddKey(0.1004994f, 0.06637689f); + Wind.keys[1].inTangent = 0f; + Wind.keys[1].outTangent = 0f; + + Wind.AddKey(0.2430963f, -0.06465532f); + Wind.keys[2].inTangent = -0.07599592f; + Wind.keys[2].outTangent = -0.07599592f; + + Wind.AddKey(0.3425266f, 0.02290122f); + Wind.keys[3].inTangent = 0.03580004f; + Wind.keys[3].outTangent = 0.03580004f; + + Wind.AddKey(0.4246872f, -0.02232522f); + Wind.keys[4].inTangent = -0.006025657f; + Wind.keys[4].outTangent = -0.006025657f; + + Wind.AddKey(0.5104106f, 0.1647801f); + Wind.keys[5].inTangent = 0.02981164f; + Wind.keys[5].outTangent = 0.02981164f; + + Wind.AddKey(0.6082056f, -0.04679203f); + Wind.keys[6].inTangent = -0.3176928f; + Wind.keys[6].outTangent = -0.3176928f; + + Wind.AddKey(0.7794942f, 0.2234365f); + Wind.keys[7].inTangent = 0.2063811f; + Wind.keys[7].outTangent = 0.2063811f; + + Wind.AddKey(0.8546611f, -0.003165513f); + Wind.keys[8].inTangent = 0.02264977f; + Wind.keys[8].outTangent = 0.02264977f; + + Wind.AddKey(1.022495f, -0.07358052f); + Wind.keys[9].inTangent = 2.450916f; + Wind.keys[9].outTangent = 2.450916f; + + Wind.AddKey(1.250894f, -0.1813075f); + Wind.keys[10].inTangent = 0.02214685f; + Wind.keys[10].outTangent = 0.02214685f; + + Wind.AddKey(1.369877f, -0.06861454f); + Wind.keys[11].inTangent = -1.860534f; + Wind.keys[11].outTangent = -1.860534f; + + Wind.AddKey(1.484951f, -0.1543293f); + Wind.keys[12].inTangent = 0.0602752f; + Wind.keys[12].outTangent = 0.0602752f; + + Wind.AddKey(1.583562f, 0.100938f); + Wind.keys[13].inTangent = 0.08665025f; + Wind.keys[13].outTangent = 0.08665025f; + + Wind.AddKey(1.687307f, -0.100769f); + Wind.keys[14].inTangent = 0.01110137f; + Wind.keys[14].outTangent = 0.01110137f; + + Wind.AddKey(1.797593f, 0.04921142f); + Wind.keys[15].inTangent = 3.407104f; + Wind.keys[15].outTangent = 3.407104f; + + Wind.AddKey(1.927248f, -0.1877219f); + Wind.keys[16].inTangent = -0.001117587f; + Wind.keys[16].outTangent = -0.001117587f; + + Wind.AddKey(2.067694f, 0.2742145f); + Wind.keys[17].inTangent = 4.736587f; + Wind.keys[17].outTangent = 4.736587f; + + Wind.AddKey(2.184602f, -0.06127208f); + Wind.keys[18].inTangent = -0.1308322f; + Wind.keys[18].outTangent = -0.1308322f; + + Wind.AddKey(2.305948f, 0.1891117f); + Wind.keys[19].inTangent = 0.04030764f; + Wind.keys[19].outTangent = 0.04030764f; + + Wind.AddKey(2.428946f, -0.1695723f); + Wind.keys[20].inTangent = -0.2463162f; + Wind.keys[20].outTangent = -0.2463162f; + + Wind.AddKey(2.55922f, 0.0359862f); + Wind.keys[21].inTangent = 0.3967434f; + Wind.keys[21].outTangent = 0.3967434f; + + Wind.AddKey(2.785119f, -0.08398628f); + Wind.keys[22].inTangent = -0.2388284f; + Wind.keys[22].outTangent = -0.2388284f; + + Wind.AddKey(3f, 0f); + Wind.keys[23].inTangent = 0f; + Wind.keys[23].outTangent = 0f; + + Wind.postWrapMode = WrapMode.Loop; + Wind.preWrapMode = WrapMode.Loop; + + + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind2", Wind.Evaluate(WindTime2)); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind3", Wind.Evaluate(WindTime3)); + if (Wind != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Wind4", Wind.Evaluate(WindTime4)); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + if (Wind != null) CanvasImage.material.SetFloat("_Wind", Wind.Evaluate(WindTime1)); + if (Wind != null) CanvasImage.material.SetFloat("_Wind2", Wind.Evaluate(WindTime2)); + if (Wind != null) CanvasImage.material.SetFloat("_Wind3", Wind.Evaluate(WindTime3)); + if (Wind != null) CanvasImage.material.SetFloat("_Wind4", Wind.Evaluate(WindTime4)); + CanvasImage.material.SetFloat("_Speed", Speed); + } + WindTime1 += (Time.deltaTime / 8) * Speed; + WindTime2 += (Time.deltaTime / 8) * Speed; + WindTime3 += (Time.deltaTime / 8) * Speed; + WindTime4 += (Time.deltaTime / 8) * Speed; + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + WindTime1 = 0; + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_GrassMultiFX)), CanEditMultipleObjects] +public class _2dxFX_GrassMultiFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_GrassMultiFX _2dxScript = (_2dxFX_GrassMultiFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Heat Distortion", icone, "Change the distortion of the heat")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_GrassMultiFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_GrassMultiFX.cs.meta new file mode 100644 index 00000000..d48c23ca --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GrassMultiFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a1352de30b09f0d4e9e1a25e3112a765 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_GrayScale.cs b/Assets/2DxFX/Scripts/_2dxFX_GrayScale.cs new file mode 100644 index 00000000..72804f52 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GrayScale.cs @@ -0,0 +1,295 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/GrayScale")] +[System.Serializable] +public class _2dxFX_GrayScale : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/GrayScale"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [Range(0, 1)] public float _EffectAmount = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer; + public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) + CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + public void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) + CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + } + + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_EffectAmount", _EffectAmount); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_EffectAmount", _EffectAmount); + } + } + } + + void OnDestroy() + { + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + + public void OnDisable() + { + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + public void OnEnable() + { + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + } + + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + } +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_GrayScale)), CanEditMultipleObjects] +public class _2dxFX_GrayScale_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_GrayScale _2dxScript = (_2dxFX_GrayScale)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), + new GUIContent("Active Update", "Active Update, for animation / Animator only")); + EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), + new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), + new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_EffectAmount"), + new GUIContent("Turn into GrayScale", icone, "Turn into GrayScale")); + + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), + new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + } + + m_object.ApplyModifiedProperties(); + } +} +#endif \ No newline at end of file diff --git a/Assets/2DxFX/Scripts/_2dxFX_GrayScale.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_GrayScale.cs.meta new file mode 100644 index 00000000..d2c234df --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_GrayScale.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b588e800cbc03d84687131f7dc1e9517 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_HSV.cs b/Assets/2DxFX/Scripts/_2dxFX_HSV.cs new file mode 100644 index 00000000..3c99e4b9 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_HSV.cs @@ -0,0 +1,309 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/HSV")] +[System.Serializable] +public class _2dxFX_HSV : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/HSV"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 360)] public float _HueShift = 180f; + [HideInInspector] [Range(-2, 2)] public float _Saturation = 1f; + [HideInInspector] [Range(-2, 2)] public float _ValueBrightness = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_HueShift", _HueShift); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Sat", _Saturation); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Val", _ValueBrightness); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_HueShift", _HueShift); + CanvasImage.material.SetFloat("_Sat", _Saturation); + CanvasImage.material.SetFloat("_Val", _ValueBrightness); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_HSV)), CanEditMultipleObjects] +public class _2dxFX_HSV_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_HSV _2dxScript = (_2dxFX_HSV)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_HueShift"), new GUIContent("Hue Shift", icone, "Change hue colors")); + icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Saturation"), new GUIContent("Color Saturation", icone, "Change the saturation")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ValueBrightness"), new GUIContent("Brighntess", icone, "Change the brightness")); + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_HSV.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_HSV.cs.meta new file mode 100644 index 00000000..b7c6120a --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_HSV.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2492f0af9bd8ac44caecc73617ecda27 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Heat.cs b/Assets/2DxFX/Scripts/_2dxFX_Heat.cs new file mode 100644 index 00000000..3e312ff1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Heat.cs @@ -0,0 +1,304 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Heat")] +[System.Serializable] +public class _2dxFX_Heat : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Heat"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Heat)), CanEditMultipleObjects] +public class _2dxFX_Heat_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Heat _2dxScript = (_2dxFX_Heat)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Heat Distortion", icone, "Change the distortion of the heat")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Heat.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Heat.cs.meta new file mode 100644 index 00000000..19cb1b53 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Heat.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9216f4853d238c14e871cacfd736a097 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Hologram.cs b/Assets/2DxFX/Scripts/_2dxFX_Hologram.cs new file mode 100644 index 00000000..ecf62b1f --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Hologram.cs @@ -0,0 +1,303 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Hologram")] +[System.Serializable] +public class _2dxFX_Hologram : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Hologram"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 4)] public float Distortion = 1.0f; + [HideInInspector] public float Speed = 1; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Distortion); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Hologram)), CanEditMultipleObjects] +public class _2dxFX_Hologram_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Hologram _2dxScript = (_2dxFX_Hologram)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Hologram.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Hologram.cs.meta new file mode 100644 index 00000000..cff1f989 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Hologram.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 846e5bd4bdbf0b745adfe7440b320b1e +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Hologram2.cs b/Assets/2DxFX/Scripts/_2dxFX_Hologram2.cs new file mode 100644 index 00000000..1a577a61 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Hologram2.cs @@ -0,0 +1,310 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Hologram2")] +[System.Serializable] +public class _2dxFX_Hologram2 : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Hologram2"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 4)] public float Distortion = 1.0f; + [HideInInspector] private float _TimeX = 0;[Range(0, 3)] + [HideInInspector] public float Speed = 1; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", 1f + _TimeX); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_TimeX", 1f + _TimeX); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Hologram2)), CanEditMultipleObjects] +public class _2dxFX_Hologram2_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Hologram2 _2dxScript = (_2dxFX_Hologram2)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Hologram2.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Hologram2.cs.meta new file mode 100644 index 00000000..d92bd801 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Hologram2.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2643c4dd9654dcd40bd4afc74cd6ffe2 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Hologram3.cs b/Assets/2DxFX/Scripts/_2dxFX_Hologram3.cs new file mode 100644 index 00000000..9bf8e52e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Hologram3.cs @@ -0,0 +1,315 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Hologram3")] +[System.Serializable] +public class _2dxFX_Hologram3 : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Hologram3"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 4)] public float Distortion = 1.0f; + [HideInInspector] private float _TimeX = 0;[Range(0, 3)] + [HideInInspector] public float Speed = 1; + [HideInInspector] public Color _ColorX = new Color(1, 1, 1, 1); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", 1f + _TimeX); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _ColorX); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_TimeX", 1f + _TimeX); + CanvasImage.material.SetColor("_ColorX", _ColorX); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Hologram3)), CanEditMultipleObjects] +public class _2dxFX_Hologram3_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Hologram3 _2dxScript = (_2dxFX_Hologram3)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion", icone, "Change the distortion")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorX"), new GUIContent("Change the color", icone, "Change the color of the sprite")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Hologram3.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Hologram3.cs.meta new file mode 100644 index 00000000..5ba8f2a1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Hologram3.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c210118d0d76476458332068d0564f99 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Ice.cs b/Assets/2DxFX/Scripts/_2dxFX_Ice.cs new file mode 100644 index 00000000..20b0df87 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Ice.cs @@ -0,0 +1,365 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Ice")] +[System.Serializable] +public class _2dxFX_Ice : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Ice"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(16, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_FireTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Ice)), CanEditMultipleObjects] +public class _2dxFX_Ice_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Ice _2dxScript = (_2dxFX_Ice)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Ice Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Ice Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Ice.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Ice.cs.meta new file mode 100644 index 00000000..7fbc669d --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Ice.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c7585dfddd17572428897a840f789957 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_IcedFX.cs b/Assets/2DxFX/Scripts/_2dxFX_IcedFX.cs new file mode 100644 index 00000000..7c830c85 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_IcedFX.cs @@ -0,0 +1,298 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/IcedFX")] +[System.Serializable] +public class _2dxFX_IcedFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/IcedFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 4f)] public float Iced = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Iced); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Iced); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_IcedFX)), CanEditMultipleObjects] +public class _2dxFX_IcedFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_IcedFX _2dxScript = (_2dxFX_IcedFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Iced"), new GUIContent("Iced Value", icone, "Turn your sprite into an iced sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_IcedFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_IcedFX.cs.meta new file mode 100644 index 00000000..1d9f7e56 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_IcedFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9ead363fc061375419bf9e91bd21b989 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Jelly.cs b/Assets/2DxFX/Scripts/_2dxFX_Jelly.cs new file mode 100644 index 00000000..561ac242 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Jelly.cs @@ -0,0 +1,309 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Jelly")] +[System.Serializable] +public class _2dxFX_Jelly : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Jelly"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(1f, 2f)] public float Inside = 1.1f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Inside", Inside); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Inside", Inside); + CanvasImage.material.SetFloat("_Speed", Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Jelly)), CanEditMultipleObjects] +public class _2dxFX_Jelly_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Jelly _2dxScript = (_2dxFX_Jelly)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Jelly Distortion", icone, "Change the distortion of the Jelly FX")); + icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Inside"), new GUIContent("Jelly Inside", icone, "Change the inside distortion of the Jelly FX")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Jelly.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Jelly.cs.meta new file mode 100644 index 00000000..ccad078c --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Jelly.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2608538603b69444a80e635b58eccee7 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_JellyAutoMove.cs b/Assets/2DxFX/Scripts/_2dxFX_JellyAutoMove.cs new file mode 100644 index 00000000..3428d902 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_JellyAutoMove.cs @@ -0,0 +1,330 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/JellyAutoMove")] +[System.Serializable] +public class _2dxFX_JellyAutoMove : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Jelly"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float RandomPos = 1.0f; + [HideInInspector] [Range(1f, 2f)] public float Inside = 1.0f; + [HideInInspector] [Range(1f, 8f)] public float Stabilisation = 4.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + + Vector3 SaveMove1; + Vector3 SaveMove2; + + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + Heat = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + SaveMove1 = transform.position; + if (SaveMove1.x != SaveMove2.x) Heat += 0.5f; + if (SaveMove1.y != SaveMove2.y) Heat += 0.5f; + if (SaveMove1.z != SaveMove2.z) Heat += 0.5f; + + Heat -= Time.deltaTime * Stabilisation; + if (Heat > 4) Heat = 4; + if (Heat < 0) { RandomPos = Random.Range(0, 256); Heat = 0; } + SaveMove2 = SaveMove1; + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_RandomPos", RandomPos); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Inside", Inside); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_RandomPos", RandomPos); + CanvasImage.material.SetFloat("_Inside", Inside); + CanvasImage.material.SetFloat("_Speed", Speed); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_JellyAutoMove)), CanEditMultipleObjects] +public class _2dxFX_JellyAutoMove_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_JellyAutoMove _2dxScript = (_2dxFX_JellyAutoMove)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + // EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Jelly Distortion", icone, "Change the distortion of the Jelly FX")); + // icone = Resources.Load ("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Inside"), new GUIContent("Jelly Inside", icone, "Change the inside distortion of the Jelly FX")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Stabilisation"), new GUIContent("Stabilisation Speed", icone, "Change the Stabilisation speed")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_JellyAutoMove.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_JellyAutoMove.cs.meta new file mode 100644 index 00000000..f12e8058 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_JellyAutoMove.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 81080e786b69f4d45891f920ad5b43c2 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Lightning.cs b/Assets/2DxFX/Scripts/_2dxFX_Lightning.cs new file mode 100644 index 00000000..3aa0c9e4 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Lightning.cs @@ -0,0 +1,366 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Lightning")] +[System.Serializable] +public class _2dxFX_Lightning : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Lightning"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(16, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Lightning2TXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Lightning)), CanEditMultipleObjects] +public class _2dxFX_Lightning_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Lightning _2dxScript = (_2dxFX_Lightning)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Lightning Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Lightning Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Lightning.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Lightning.cs.meta new file mode 100644 index 00000000..dcd7a4f7 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Lightning.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4ee9ad4c74b2eff478c683de37b56cee +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_LightningBolt.cs b/Assets/2DxFX/Scripts/_2dxFX_LightningBolt.cs new file mode 100644 index 00000000..ab793c40 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_LightningBolt.cs @@ -0,0 +1,365 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/LightningBolt")] +[System.Serializable] +public class _2dxFX_LightningBolt : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/LightningBolt"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(16, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 2)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_LightningTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_LightningBolt)), CanEditMultipleObjects] +public class _2dxFX_LightningBolt_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_LightningBolt _2dxScript = (_2dxFX_LightningBolt)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Lightning Bolt Speed", icone, "Change the fire speed")); + + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Lightning Bolt Intensity", icone, "Change the fire light intensity")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_LightningBolt.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_LightningBolt.cs.meta new file mode 100644 index 00000000..6a794085 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_LightningBolt.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a6af0fe8c6a5ff4439f02d6477362106 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Liquid.cs b/Assets/2DxFX/Scripts/_2dxFX_Liquid.cs new file mode 100644 index 00000000..0eed07bc --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Liquid.cs @@ -0,0 +1,313 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Liquid")] +[System.Serializable] +public class _2dxFX_Liquid : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Liquid"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Liquid)), CanEditMultipleObjects] +public class _2dxFX_Liquid_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Liquid _2dxScript = (_2dxFX_Liquid)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Liquid Distortion", icone, "Change the distortion of the liquid")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Light"), new GUIContent("Light Intensity", icone, "Change the intensity of the light")); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("EValue"), new GUIContent("Effect Value", icone, "Change the effect intensity")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Liquid.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Liquid.cs.meta new file mode 100644 index 00000000..a09eff32 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Liquid.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f40d78aeafe77db4c9191438047f3e6d +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Liquify.cs b/Assets/2DxFX/Scripts/_2dxFX_Liquify.cs new file mode 100644 index 00000000..4b80ff67 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Liquify.cs @@ -0,0 +1,346 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Liquify")] +[System.Serializable] +public class _2dxFX_Liquify : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Liquify"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0f, 1f)] public float TurnToLiquid = 0.052f; + [HideInInspector] [Range(0.0f, 32f)] public float Heat = 4.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + CanvasSpriteRenderer.sharedMaterial.SetFloat("TurnToLiquid", TurnToLiquid); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + CanvasImage.material.SetFloat("TurnToLiquid", TurnToLiquid); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Liquify)), CanEditMultipleObjects] +public class _2dxFX_Liquify_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Liquify _2dxScript = (_2dxFX_Liquify)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TurnToLiquid"), new GUIContent("Turn To Liquid", icone, "Turn to liquid = 0 = normal sprite : 1 = Liquify")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Liquid Distortion", icone, "Change the distortion of the liquid")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Liquify.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Liquify.cs.meta new file mode 100644 index 00000000..b603d4cb --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Liquify.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0caf47ae7a836574182abaef50e0cdc6 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_MetalFX.cs b/Assets/2DxFX/Scripts/_2dxFX_MetalFX.cs new file mode 100644 index 00000000..034a76dd --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_MetalFX.cs @@ -0,0 +1,296 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/MetalFX")] +[System.Serializable] +public class _2dxFX_MetalFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/MetalFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 6f)] public float Metal = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Metal); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Metal); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_MetalFX)), CanEditMultipleObjects] +public class _2dxFX_MetalFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_MetalFX _2dxScript = (_2dxFX_MetalFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Metal"), new GUIContent("Metal Value", icone, "Turn your sprite into a metal sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_MetalFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_MetalFX.cs.meta new file mode 100644 index 00000000..6dafb207 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_MetalFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fb12cb093623d7047baa93e71322d481 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion.cs b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion.cs new file mode 100644 index 00000000..e6195a2b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion.cs @@ -0,0 +1,396 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Mystic_Distortion")] +[System.Serializable] +public class _2dxFX_Mystic_Distortion : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Mystic_Distortion"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 0.45f)] public float _Pitch = 0.45f; + [HideInInspector] public bool Pitch_Wave = true; + [HideInInspector] [Range(0f, 16f)] public float _Pitch_Speed = 1.0f; + [HideInInspector] [Range(0f, 1f)] public float _Pitch_Offset = 0.0f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetX = 56f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetY = 28f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceX = 0.01f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceY = 0.04f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeX = 1.16f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeY = 5.12f; + [HideInInspector] public bool AutoPlayWaveX = false; + [HideInInspector] [Range(0f, 5f)] public float AutoPlaySpeedX = 5f; + [HideInInspector] public bool AutoPlayWaveY = false; + [HideInInspector] [Range(0f, 50f)] public float AutoPlaySpeedY = 5f; + [HideInInspector] public bool AutoRandom = false; + [HideInInspector] [Range(0f, 50f)] public float AutoRandomRange = 10f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + + if (Pitch_Wave) + { + _Pitch_Offset = Mathf.Sin(Time.time * _Pitch_Speed) * 0.05f; + + } + else + { + _Pitch_Offset = 0; + } + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Pitch", _Pitch + _Pitch_Offset); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceX", _DistanceX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceY", _DistanceY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeY", _WaveTimeY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + + CanvasImage.material.SetFloat("_Pitch", _Pitch + _Pitch_Offset); + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + CanvasImage.material.SetFloat("_DistanceX", _DistanceX); + CanvasImage.material.SetFloat("_DistanceY", _DistanceY); + CanvasImage.material.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasImage.material.SetFloat("_WaveTimeY", _WaveTimeY); + } + + float timerange; + if (AutoRandom) + { + timerange = (Random.Range(1, AutoRandomRange) / 5) * Time.deltaTime; + } + else + { + timerange = Time.deltaTime; + } + + if (AutoPlayWaveX) _WaveTimeX += AutoPlaySpeedX * timerange; + if (AutoPlayWaveY) _WaveTimeY += AutoPlaySpeedY * timerange; + if (_WaveTimeX > 6.28f) _WaveTimeX = 0f; + if (_WaveTimeY > 6.28f) _WaveTimeY = 0f; + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Mystic_Distortion)), CanEditMultipleObjects] +public class _2dxFX_Mystic_Distortion_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Mystic_Distortion _2dxScript = (_2dxFX_Mystic_Distortion)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset of X")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset of Y")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Pitch"), new GUIContent("Pitch", icone, "Change the Pitch Offset")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + + + EditorGUILayout.PropertyField(m_object.FindProperty("Pitch_Wave"), new GUIContent("Active Pitch Wave", icone, "Active the pitch wave FX")); + + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + if (_2dxScript.Pitch_Wave) + { + EditorGUILayout.PropertyField(m_object.FindProperty("_Pitch_Speed"), new GUIContent("Pitch Speed", icone, "Change the Speed of the pitch FX")); + } + + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceX"), new GUIContent("Distance X", icone, "Change the distance of X")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceY"), new GUIContent("Distance Y", icone, "Change the distance of Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeX"), new GUIContent("Wave Time X", icone, "Change the time speed of the wave X")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeY"), new GUIContent("Wave Time Y", icone, "Change the time speed of the wave Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + + + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveX"), new GUIContent("Active AutoPlay Wave X", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedX"), new GUIContent("AutoPlay Speed X", icone, "Speed of the auto play X")); + } + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveY"), new GUIContent("Active AutoPlay Wave Y", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedY"), new GUIContent("AutoPlay Speed Y", icone, "Speed of the auto play Y")); + } + icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandom"), new GUIContent("Auto Random", icone, "Active the random value")); + if (_2dxScript.AutoRandom) + { + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandomRange"), new GUIContent("Auto Random Range", icone, "Change the random value")); + } + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion.cs.meta new file mode 100644 index 00000000..4578aecc --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f9b75f9476f8f5a4a8d4fe81dca7c322 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion_Additive.cs b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion_Additive.cs new file mode 100644 index 00000000..5701cd42 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion_Additive.cs @@ -0,0 +1,396 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Mystic_Distortion_Additive")] +[System.Serializable] +public class _2dxFX_Mystic_Distortion_Additive : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Mystic_Distortion_Additive"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 0.45f)] public float _Pitch = 0.45f; + [HideInInspector] public bool Pitch_Wave = true; + [HideInInspector] [Range(0f, 16f)] public float _Pitch_Speed = 1.0f; + [HideInInspector] [Range(0f, 1f)] public float _Pitch_Offset = 0.0f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetX = 56f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetY = 28f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceX = 0.01f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceY = 0.04f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeX = 1.16f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeY = 5.12f; + [HideInInspector] public bool AutoPlayWaveX = false; + [HideInInspector] [Range(0f, 5f)] public float AutoPlaySpeedX = 5f; + [HideInInspector] public bool AutoPlayWaveY = false; + [HideInInspector] [Range(0f, 50f)] public float AutoPlaySpeedY = 5f; + [HideInInspector] public bool AutoRandom = false; + [HideInInspector] [Range(0f, 50f)] public float AutoRandomRange = 10f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + + if (Pitch_Wave) + { + _Pitch_Offset = Mathf.Sin(Time.time * _Pitch_Speed) * 0.05f; + + } + else + { + _Pitch_Offset = 0; + } + + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Pitch", _Pitch + _Pitch_Offset); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceX", _DistanceX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceY", _DistanceY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeY", _WaveTimeY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + + CanvasImage.material.SetFloat("_Pitch", _Pitch + _Pitch_Offset); + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + CanvasImage.material.SetFloat("_DistanceX", _DistanceX); + CanvasImage.material.SetFloat("_DistanceY", _DistanceY); + CanvasImage.material.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasImage.material.SetFloat("_WaveTimeY", _WaveTimeY); + } + + float timerange; + if (AutoRandom) + { + timerange = (Random.Range(1, AutoRandomRange) / 5) * Time.deltaTime; + } + else + { + timerange = Time.deltaTime; + } + + if (AutoPlayWaveX) _WaveTimeX += AutoPlaySpeedX * timerange; + if (AutoPlayWaveY) _WaveTimeY += AutoPlaySpeedY * timerange; + if (_WaveTimeX > 6.28f) _WaveTimeX = 0f; + if (_WaveTimeY > 6.28f) _WaveTimeY = 0f; + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Mystic_Distortion_Additive)), CanEditMultipleObjects] +public class _2dxFX_Mystic_Distortion_Additive_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Mystic_Distortion_Additive _2dxScript = (_2dxFX_Mystic_Distortion_Additive)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset of X")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset of Y")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Pitch"), new GUIContent("Pitch", icone, "Change the Pitch Offset")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + + + EditorGUILayout.PropertyField(m_object.FindProperty("Pitch_Wave"), new GUIContent("Active Pitch Wave", icone, "Active the pitch wave FX")); + + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + if (_2dxScript.Pitch_Wave) + { + EditorGUILayout.PropertyField(m_object.FindProperty("_Pitch_Speed"), new GUIContent("Pitch Speed", icone, "Change the Speed of the pitch FX")); + } + + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceX"), new GUIContent("Distance X", icone, "Change the distance of X")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceY"), new GUIContent("Distance Y", icone, "Change the distance of Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeX"), new GUIContent("Wave Time X", icone, "Change the time speed of the wave X")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeY"), new GUIContent("Wave Time Y", icone, "Change the time speed of the wave Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + + + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveX"), new GUIContent("Active AutoPlay Wave X", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedX"), new GUIContent("AutoPlay Speed X", icone, "Speed of the auto play X")); + } + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveY"), new GUIContent("Active AutoPlay Wave Y", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedY"), new GUIContent("AutoPlay Speed Y", icone, "Speed of the auto play Y")); + } + icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandom"), new GUIContent("Auto Random", icone, "Active the random value")); + if (_2dxScript.AutoRandom) + { + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandomRange"), new GUIContent("Auto Random Range", icone, "Change the random value")); + } + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion_Additive.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion_Additive.cs.meta new file mode 100644 index 00000000..4c05ab9d --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Mystic_Distortion_Additive.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b695a26e0da931c4e9c5983719505bfb +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Negative.cs b/Assets/2DxFX/Scripts/_2dxFX_Negative.cs new file mode 100644 index 00000000..cdcae280 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Negative.cs @@ -0,0 +1,297 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Negative")] +[System.Serializable] +public class _2dxFX_Negative : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Negative"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Negative = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Negative); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Negative); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Negative)), CanEditMultipleObjects] +public class _2dxFX_Negative_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Negative _2dxScript = (_2dxFX_Negative)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Negative"), new GUIContent("Negative Value", icone, "Change the value of the Negative effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Negative.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Negative.cs.meta new file mode 100644 index 00000000..e7dacce8 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Negative.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c93e049d026cf0942b43010404ea0d5b +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation.cs b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation.cs new file mode 100644 index 00000000..b0b2f1bc --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation.cs @@ -0,0 +1,357 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/NewTeleportation")] +[System.Serializable] +public class _2dxFX_NewTeleportation : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/NewTeleportation"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Fade = 0.5f; + [HideInInspector] [Range(1, 16)] public float _HDR_Intensity = 1f; + + [HideInInspector] public Color TeleportationColor = new Color(0, 0.5f, 1); + [HideInInspector] [Range(0.1f, 2)] public float _Distortion = 1; + + + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_NewTeleportationTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_NewTeleportationTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("TeleportationColor", TeleportationColor); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", _Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Fade", _Fade); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_HDR_Intensity", _HDR_Intensity); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("TeleportationColor", TeleportationColor); + CanvasImage.material.SetFloat("_Distortion", _Distortion); + CanvasImage.material.SetFloat("_Fade", _Fade); + CanvasImage.material.SetFloat("_HDR_Intensity", _HDR_Intensity); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_NewTeleportationTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_NewTeleportationTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_NewTeleportation)), CanEditMultipleObjects] +public class _2dxFX_NewTeleportation_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_NewTeleportation _2dxScript = (_2dxFX_NewTeleportation)target; + + Texture2D icon = Resources.Load("2dxfxinspector-hdr") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Fade"), new GUIContent("Fade of the FX", icone, "Change the Fade of the FX")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TeleportationColor"), new GUIContent("Teleportation Color", icone, "Color")); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Distortion"), new GUIContent("Distortion Value", icone, "")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_HDR_Intensity"), new GUIContent("HDR Value", icone, "")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation.cs.meta new file mode 100644 index 00000000..afd0a042 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5416e0a4285e02c45ae85b8e13265e6a +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation2.cs b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation2.cs new file mode 100644 index 00000000..2b507671 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation2.cs @@ -0,0 +1,367 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/NewTeleportation2")] +[System.Serializable] +public class _2dxFX_NewTeleportation2 : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/NewTeleportation2"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Fade = 0.5f; + [HideInInspector] [Range(1, 16)] public float _HDR_Intensity = 1f; + + [HideInInspector] public Color TeleportationColor = new Color(0, 0.5f, 1); + [HideInInspector] [Range(0.1f, 2)] public float _Distortion = 1; + + + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_NewTeleportation2TXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_NewTeleportation2TXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("TeleportationColor", TeleportationColor); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", _Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Fade", _Fade); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_HDR_Intensity", _HDR_Intensity); + + + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("TeleportationColor", TeleportationColor); + CanvasImage.material.SetFloat("_Distortion", _Distortion); + CanvasImage.material.SetFloat("_Fade", _Fade); + CanvasImage.material.SetFloat("_HDR_Intensity", _HDR_Intensity); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_NewTeleportation2TXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_NewTeleportation2TXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_NewTeleportation2)), CanEditMultipleObjects] +public class _2dxFX_NewTeleportation2_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_NewTeleportation2 _2dxScript = (_2dxFX_NewTeleportation2)target; + + Texture2D icon = Resources.Load("2dxfxinspector-hdr") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Fade"), new GUIContent("Fade of the FX", icone, "Change the Fade of the FX")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TeleportationColor"), new GUIContent("Teleportation Color", icone, "Color")); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Distortion"), new GUIContent("Distortion Value", icone, "")); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_HDR_Intensity"), new GUIContent("HDR Value", icone, "")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation2.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation2.cs.meta new file mode 100644 index 00000000..23a9097b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_NewTeleportation2.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a6d4c1f1c688928418b0924f3a1e08bc +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Noise.cs b/Assets/2DxFX/Scripts/_2dxFX_Noise.cs new file mode 100644 index 00000000..5db18682 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Noise.cs @@ -0,0 +1,296 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Noise")] +[System.Serializable] +public class _2dxFX_Noise : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Noise"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Noise = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Noise); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Noise); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Noise)), CanEditMultipleObjects] +public class _2dxFX_Noise_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Noise _2dxScript = (_2dxFX_Noise)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Noise"), new GUIContent("Noise Value", icone, "Change the value of the Noise effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Noise.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Noise.cs.meta new file mode 100644 index 00000000..84b52e36 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Noise.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d25b131191df61a4bb464895ca4f9526 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_NoiseAnimated.cs b/Assets/2DxFX/Scripts/_2dxFX_NoiseAnimated.cs new file mode 100644 index 00000000..e997cab6 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_NoiseAnimated.cs @@ -0,0 +1,296 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/NoiseAnimated")] +[System.Serializable] +public class _2dxFX_NoiseAnimated : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/NoiseAnimated"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Noise = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Noise); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Noise); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_NoiseAnimated)), CanEditMultipleObjects] +public class _2dxFX_NoiseAnimated_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_NoiseAnimated _2dxScript = (_2dxFX_NoiseAnimated)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Noise"), new GUIContent("Noise Value", icone, "Change the value of the Noise effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_NoiseAnimated.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_NoiseAnimated.cs.meta new file mode 100644 index 00000000..80c64955 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_NoiseAnimated.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2fdedaa643a506a44bdd8e43c4541988 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Offset.cs b/Assets/2DxFX/Scripts/_2dxFX_Offset.cs new file mode 100644 index 00000000..5f27de3e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Offset.cs @@ -0,0 +1,386 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Offset")] +[System.Serializable] +public class _2dxFX_Offset : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Offset"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-1f, 1f)] public float _OffsetX = 0f; + [HideInInspector] [Range(-1f, 1f)] public float _OffsetY = 0f; + [HideInInspector] [Range(0.001f, 8f)] public float _ZoomX = 1f; + [HideInInspector] [Range(0.001f, 8f)] public float _ZoomY = 1f; + [HideInInspector] [Range(0.001f, 64f)] public float _ZoomXY = 1f; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(-100, 100)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(-100, 100)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + + if (_AutoScrollX == true) + { + _AutoScrollCountX += _AutoScrollSpeedX * 0.01f * Time.deltaTime; + if (_AutoScrollCountX < 0) _AutoScrollCountX = 1; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", 1 + _AutoScrollCountX); + + } + else + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", 1 + _OffsetX); + } + if (_AutoScrollY == true) + { + _AutoScrollCountY += _AutoScrollSpeedY * 0.01f * Time.deltaTime; + if (_AutoScrollCountY < 0) _AutoScrollCountY = 1; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", 1 + _AutoScrollCountY); + } + else + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", 1 + _OffsetY); + } + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ZoomX", _ZoomX * _ZoomXY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_ZoomY", _ZoomY * _ZoomXY); + } + else if (CanvasImage != null) + { + + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + if (_AutoScrollX == true) + { + _AutoScrollCountX += _AutoScrollSpeedX * 0.01f * Time.deltaTime; + if (_AutoScrollCountX < 0) _AutoScrollCountX = 1; + CanvasImage.material.SetFloat("_OffsetX", 1 + _AutoScrollCountX); + } + else + { + CanvasImage.material.SetFloat("_OffsetX", 1 + _OffsetX); + } + if (_AutoScrollY == true) + { + _AutoScrollCountY += _AutoScrollSpeedY * 0.01f * Time.deltaTime; + if (_AutoScrollCountY < 0) _AutoScrollCountY = 1; + CanvasImage.material.SetFloat("_OffsetY", 1 + _AutoScrollCountY); + } + else + { + CanvasImage.material.SetFloat("_OffsetY", 1 + _OffsetY); + } + CanvasImage.material.SetFloat("_ZoomX", _ZoomX * _ZoomXY); + CanvasImage.material.SetFloat("_ZoomY", _ZoomY * _ZoomXY); + + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Offset)), CanEditMultipleObjects] +public class _2dxFX_Offset_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Offset _2dxScript = (_2dxFX_Offset)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset value of X")); + + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset value of Y")); + + icone = Resources.Load("2dxfx-icon-clip_up") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ZoomX"), new GUIContent("Zoom X", icone, "Change the Zoom value of X")); + + icone = Resources.Load("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ZoomY"), new GUIContent("Zoom Y", icone, "Change the Zoom value of Y")); + + icone = Resources.Load("2dxfx-icon-clip_down") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ZoomXY"), new GUIContent("Zoom XY", icone, "Change the Zoom value of X and Y. Note if you want to change only the X or the Y, you must set Zoom XY to 1")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollX"), new GUIContent("Auto Scroll X", icone, "Change the value of the posterize effect")); + if (_2dxScript._AutoScrollX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedX"), new GUIContent("Auto Scroll Speed X", icone, "Change the value of the posterize effect")); + } + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollY"), new GUIContent("Auto Scroll Y", icone, "Change the value of the posterize effect")); + + if (_2dxScript._AutoScrollY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedY"), new GUIContent("Auto Scroll Speed Y", icone, "Change the value of the posterize effect")); + } + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Offset.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Offset.cs.meta new file mode 100644 index 00000000..26292107 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Offset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 671454577ec88a449aaecf1a4652fa72 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Outline.cs b/Assets/2DxFX/Scripts/_2dxFX_Outline.cs new file mode 100644 index 00000000..ff202ba4 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Outline.cs @@ -0,0 +1,303 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Outline")] +[System.Serializable] +public class _2dxFX_Outline : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + + private string shader = "2DxFX/Standard/Outline"; + + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] public Color _ColorX = new Color(1f, 1f, 1f, 1f); + [HideInInspector] [Range(0f, 0.020f)] public float _OutLineSpread = 0.007f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _ColorX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OutLineSpread", _OutLineSpread); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _ColorX); + CanvasImage.material.SetFloat("_OutLineSpread", _OutLineSpread); + } + + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Outline)), CanEditMultipleObjects] +public class _2dxFX_Outline_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Outline _2dxScript = (_2dxFX_Outline)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorX"), new GUIContent("Outline color", icone, "Change the color of the outline")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OutLineSpread"), new GUIContent("Outline size", icone, "Change the size of the outline")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Outline.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Outline.cs.meta new file mode 100644 index 00000000..23df9bf1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Outline.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 671e5299f45539b4fa8402eed33d84d2 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pattern.cs b/Assets/2DxFX/Scripts/_2dxFX_Pattern.cs new file mode 100644 index 00000000..4b8a01eb --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pattern.cs @@ -0,0 +1,404 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Pattern")] +[System.Serializable] +public class _2dxFX_Pattern : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Pattern"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] public float _OffsetX; + [HideInInspector] public float _OffsetY; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(-3, 3)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(-3, 3)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.material.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasSpriteRenderer.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + if (_AutoScrollCountX > 1) _AutoScrollCountX = 0; + if (_AutoScrollCountX < -1) _AutoScrollCountX = 0; + if (_AutoScrollCountY > 1) _AutoScrollCountY = 0; + if (_AutoScrollCountY < -1) _AutoScrollCountY = 0; + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + } + + if (gameObject.activeSelf) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + + } + + void OnEnable() + { + + + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + } + + + +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Pattern)), CanEditMultipleObjects] +public class _2dxFX_Pattern_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Pattern _2dxScript = (_2dxFX_Pattern)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("__MainTex2"), new GUIContent("Texture Pattern", icone, "Change the value of the posterize effect")); + if (_2dxScript.__MainTex2) + { + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the value of the posterize effect")); + + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the value of the posterize effect")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollX"), new GUIContent("Auto Scroll X", icone, "Change the value of the posterize effect")); + if (_2dxScript._AutoScrollX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedX"), new GUIContent("Auto Scroll Speed X", icone, "Change the value of the posterize effect")); + } + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollY"), new GUIContent("Auto Scroll Y", icone, "Change the value of the posterize effect")); + + if (_2dxScript._AutoScrollY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedY"), new GUIContent("Auto Scroll Speed Y", icone, "Change the value of the posterize effect")); + } + } + else + { + EditorGUILayout.LabelField(new GUIContent("**You must add a sprite on the Texture Pattern field**", "You need to add a sprite here in order to use the pattern fx, you can use the same sprite if you want")); + } + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pattern.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Pattern.cs.meta new file mode 100644 index 00000000..b282ab34 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pattern.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 46cdcc897cdf0b44fa05ff973d5492a6 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_PatternAdditive.cs b/Assets/2DxFX/Scripts/_2dxFX_PatternAdditive.cs new file mode 100644 index 00000000..cd9d8ab6 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PatternAdditive.cs @@ -0,0 +1,402 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/PatternAdditive")] +[System.Serializable] +public class _2dxFX_PatternAdditive : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/PatternAdditive"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] public float _OffsetX; + [HideInInspector] public float _OffsetY; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(-3, 3)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(-3, 3)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + if (_AutoScrollCountX > 1) _AutoScrollCountX = 0; + if (_AutoScrollCountX < -1) _AutoScrollCountX = 0; + if (_AutoScrollCountY > 1) _AutoScrollCountY = 0; + if (_AutoScrollCountY < -1) _AutoScrollCountY = 0; + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + } + + if (gameObject.activeSelf) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + + } + + void OnEnable() + { + + + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_PatternAdditive)), CanEditMultipleObjects] +public class _2dxFX_PatternAdditive_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_PatternAdditive _2dxScript = (_2dxFX_PatternAdditive)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("__MainTex2"), new GUIContent("Texture Pattern", icone, "Change the value of the posterize effect")); + if (_2dxScript.__MainTex2) + { + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the value of the posterize effect")); + + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the value of the posterize effect")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollX"), new GUIContent("Auto Scroll X", icone, "Change the value of the posterize effect")); + if (_2dxScript._AutoScrollX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedX"), new GUIContent("Auto Scroll Speed X", icone, "Change the value of the posterize effect")); + } + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollY"), new GUIContent("Auto Scroll Y", icone, "Change the value of the posterize effect")); + + if (_2dxScript._AutoScrollY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedY"), new GUIContent("Auto Scroll Speed Y", icone, "Change the value of the posterize effect")); + } + } + else + { + EditorGUILayout.LabelField(new GUIContent("**You must add a sprite on the Texture Pattern field**", "You need to add a sprite here in order to use the pattern fx, you can use the same sprite if you want")); + } + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_PatternAdditive.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_PatternAdditive.cs.meta new file mode 100644 index 00000000..18db9937 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PatternAdditive.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6ab41ca03ed05f84b80e56976e2f58f2 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel.cs b/Assets/2DxFX/Scripts/_2dxFX_Pixel.cs new file mode 100644 index 00000000..d0b35c66 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel.cs @@ -0,0 +1,299 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Pixel")] +[System.Serializable] +public class _2dxFX_Pixel : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Pixel"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(4f, 128f)] public float _Offset = 32f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Offset", _Offset); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Pixel)), CanEditMultipleObjects] +public class _2dxFX_Pixel_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Pixel _2dxScript = (_2dxFX_Pixel)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Pixel.cs.meta new file mode 100644 index 00000000..632231e4 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21ab94f99b76f144ab86ed38fee0e4d8 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsBW.cs b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsBW.cs new file mode 100644 index 00000000..d549cbd0 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsBW.cs @@ -0,0 +1,300 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Pixel 8 Bits Black & White")] +[System.Serializable] +public class _2dxFX_Pixel8bitsBW : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Pixel8bitsBW"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Size = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Offset = 1f; + [HideInInspector] [Range(0f, 10f)] public float _Offset2 = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", _Size); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset2", _Offset2); + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Size", _Size); + CanvasImage.material.SetFloat("_Offset", _Offset); + CanvasImage.material.SetFloat("_Offset2", _Offset2); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Pixel8bitsBW)), CanEditMultipleObjects] +public class _2dxFX_Pixel8bitsBW_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Pixel8bitsBW _2dxScript = (_2dxFX_Pixel8bitsBW)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Size"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset2"), new GUIContent("Brightness Color", icone, "Change the brightness of the color")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsBW.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsBW.cs.meta new file mode 100644 index 00000000..6a6e13ba --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsBW.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1aff5f69dd71cde4dbd07b33f785290a +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsC64.cs b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsC64.cs new file mode 100644 index 00000000..8c003c7b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsC64.cs @@ -0,0 +1,305 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Pixel 8 Bits Commodore 64")] +[System.Serializable] +public class _2dxFX_Pixel8bitsC64 : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Pixel8bitsC64"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Size = 1f; + [HideInInspector] [Range(0.01f, 3f)] public float _Offset = 1f; + [HideInInspector] [Range(0f, 3f)] public float _Offset2 = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", _Size); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset2", _Offset2); + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Size", _Size); + CanvasImage.material.SetFloat("_Offset", _Offset); + CanvasImage.material.SetFloat("_Offset2", _Offset2); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Pixel8bitsC64)), CanEditMultipleObjects] +public class _2dxFX_Pixel8bitsC64_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Pixel8bitsC64 _2dxScript = (_2dxFX_Pixel8bitsC64)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Size"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Horizontal Size", icone, "Change the horizontal size of the pixel")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset2"), new GUIContent("Brightness Color", icone, "Change the brightness of the color")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsC64.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsC64.cs.meta new file mode 100644 index 00000000..abceca21 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsC64.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3f6576f4183845c448e3af5ede314d55 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsGB.cs b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsGB.cs new file mode 100644 index 00000000..99cff5d9 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsGB.cs @@ -0,0 +1,300 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Pixel 8 Bits Gameboy")] +[System.Serializable] +public class _2dxFX_Pixel8bitsGB : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Pixel8bitsGB"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.01f, 10f)] public float _Size = 1f; + [HideInInspector] [Range(0f, 3f)] public float _Offset = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Size", _Size); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset2", _Offset); + this.GetComponent().sprite.texture.mipMapBias = -10; + this.GetComponent().sprite.texture.filterMode = FilterMode.Point; + + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Size", _Size); + CanvasImage.material.SetFloat("_Offset2", _Offset); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Pixel8bitsGB)), CanEditMultipleObjects] +public class _2dxFX_Pixel8bitsGB_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Pixel8bitsGB _2dxScript = (_2dxFX_Pixel8bitsGB)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + Texture2D icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Size"), new GUIContent("Pixel Size", icone, "Change the size of the pixel")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Brightness Color", icone, "Change the brightness of the color")); + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsGB.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsGB.cs.meta new file mode 100644 index 00000000..76340981 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Pixel8bitsGB.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 488a04745abb5b443b42938f5a66111d +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_PixelDie.cs b/Assets/2DxFX/Scripts/_2dxFX_PixelDie.cs new file mode 100644 index 00000000..3201f0bb --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PixelDie.cs @@ -0,0 +1,354 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/PixelDie")] +[System.Serializable] +public class _2dxFX_PixelDie : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/PixelDie"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0, 1)] public float _Value1 = 0.25f; + [HideInInspector] [Range(0, 1)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_PixelDieTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_PixelDie)), CanEditMultipleObjects] +public class _2dxFX_PixelDie_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_PixelDie _2dxScript = (_2dxFX_PixelDie)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value1"), new GUIContent("Pixel Dead Value", icone, "Change the pixel value 0 = Full / 1 = Nothing")); + + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_PixelDie.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_PixelDie.cs.meta new file mode 100644 index 00000000..db1e9921 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PixelDie.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9303bedcf09fac74c872648f417d73dc +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow.cs b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow.cs new file mode 100644 index 00000000..c72a4f47 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow.cs @@ -0,0 +1,314 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/PlasmaRainbow")] +[System.Serializable] +public class _2dxFX_PlasmaRainbow : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/PlasmaRainbow"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.1f, 8f)] public float _Colors = 6f; + [HideInInspector] [Range(0.1f, 4f)] public float _Offset = 2.5f; + [HideInInspector] private float _TimeX = 0; + [HideInInspector] [Range(0, 3)] public float Speed = 1; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Colors", _Colors); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", _TimeX); + } + + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Colors", _Colors); + CanvasImage.material.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_TimeX", _TimeX); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_PlasmaRainbow)), CanEditMultipleObjects] +public class _2dxFX_PlasmaRainbow_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_PlasmaRainbow _2dxScript = (_2dxFX_PlasmaRainbow)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Colors"), new GUIContent("Change the colors", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Change the offset", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Speed Value", icone, "Change the speed value")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow.cs.meta new file mode 100644 index 00000000..17631f48 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 05e57f64aef339441ad8730281f8df86 +timeCreated: 1529660389 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow_Color.cs b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow_Color.cs new file mode 100644 index 00000000..10be6dc2 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow_Color.cs @@ -0,0 +1,314 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/PlasmaRainbow_Color")] +[System.Serializable] +public class _2dxFX_PlasmaRainbow_Color : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/PlasmaRainbow_Color"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.1f, 8f)] public float _Colors = 6f; + [HideInInspector] [Range(0.1f, 4f)] public float _Offset = 2.5f; + [HideInInspector] private float _TimeX = 0; + [HideInInspector] [Range(0, 3)] public float Speed = 1; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Colors", _Colors); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", _TimeX); + } + + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Colors", _Colors); + CanvasImage.material.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_TimeX", _TimeX); + } + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_PlasmaRainbow_Color)), CanEditMultipleObjects] +public class _2dxFX_PlasmaRainbow_Color_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_PlasmaRainbow_Color _2dxScript = (_2dxFX_PlasmaRainbow_Color)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Colors"), new GUIContent("Change the colors", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Change the offset", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Speed Value", icone, "Change the speed value")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow_Color.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow_Color.cs.meta new file mode 100644 index 00000000..9f78619a --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PlasmaRainbow_Color.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8eb22c7be02144c478329195b146d6d1 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_PlasmaShield.cs b/Assets/2DxFX/Scripts/_2dxFX_PlasmaShield.cs new file mode 100644 index 00000000..da38257e --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PlasmaShield.cs @@ -0,0 +1,313 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/PlasmaShield")] +[System.Serializable] +public class _2dxFX_PlasmaShield : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/PlasmaShield"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] public Color _ColorX = new Color(1f, 1f, 1f, 1f); + [HideInInspector] [Range(0.1f, 4f)] public float _Offset = 2.5f; + [HideInInspector] private float _TimeX = 0; + [HideInInspector] [Range(0, 3)] public float Speed = 1; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + ActiveChange = false; + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetColor("_ColorX", _ColorX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_TimeX", _TimeX); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetColor("_ColorX", _ColorX); + CanvasImage.material.SetFloat("_Offset", _Offset); + _TimeX += Time.deltaTime * Speed; + if (_TimeX > 100) _TimeX = 0; + CanvasImage.material.SetFloat("_TimeX", _TimeX); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_PlasmaShield)), CanEditMultipleObjects] +public class _2dxFX_PlasmaShield_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_PlasmaShield _2dxScript = (_2dxFX_PlasmaShield)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_ColorX"), new GUIContent("Change the colors", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Offset"), new GUIContent("Change the offset", icone, "Change the plasma colors")); + + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Speed Value", icone, "Change the speed value")); + + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_PlasmaShield.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_PlasmaShield.cs.meta new file mode 100644 index 00000000..57c7a8f1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_PlasmaShield.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 540ce9c639bd8a2469aafd3d225fb94b +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Posterize.cs b/Assets/2DxFX/Scripts/_2dxFX_Posterize.cs new file mode 100644 index 00000000..6397c9ea --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Posterize.cs @@ -0,0 +1,295 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Posterize")] +[System.Serializable] +public class _2dxFX_Posterize : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Posterize"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(1, 256)] public float Posterize = 120.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Posterize); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Posterize); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Posterize)), CanEditMultipleObjects] +public class _2dxFX_Posterize_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Posterize _2dxScript = (_2dxFX_Posterize)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Posterize"), new GUIContent("Posterize Value", icone, "Change the value of the posterize effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Posterize.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Posterize.cs.meta new file mode 100644 index 00000000..f6ed8bbf --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Posterize.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 923c3e74a0d30fa43800009b64ffb690 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_SandFX.cs b/Assets/2DxFX/Scripts/_2dxFX_SandFX.cs new file mode 100644 index 00000000..b3346e2b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_SandFX.cs @@ -0,0 +1,296 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/SandFX")] +[System.Serializable] +public class _2dxFX_SandFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/SandFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 1f)] public float Sand = 1.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Sand); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Sand); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_SandFX)), CanEditMultipleObjects] +public class _2dxFX_SandFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_SandFX _2dxScript = (_2dxFX_SandFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Sand"), new GUIContent("Sand Value", icone, "Turn your sprite into a sand sprite !")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_SandFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_SandFX.cs.meta new file mode 100644 index 00000000..0f1615b0 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_SandFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 01f5adb8cadeddb42b5c76849aad5477 +timeCreated: 1529660389 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Sepia.cs b/Assets/2DxFX/Scripts/_2dxFX_Sepia.cs new file mode 100644 index 00000000..88e22b59 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Sepia.cs @@ -0,0 +1,295 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Sepia")] +[System.Serializable] +public class _2dxFX_Sepia : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Sepia"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float _EffectAmount = 1f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", _EffectAmount); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", _EffectAmount); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Sepia)), CanEditMultipleObjects] +public class _2dxFX_Sepia_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Sepia _2dxScript = (_2dxFX_Sepia)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_EffectAmount"), new GUIContent("Turn into Sepia", icone, "Turn into Sepia")); + + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Sepia.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Sepia.cs.meta new file mode 100644 index 00000000..0f4720ef --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Sepia.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2d355f56ab7eb924c9514dd8c6d0d121 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Sharpen.cs b/Assets/2DxFX/Scripts/_2dxFX_Sharpen.cs new file mode 100644 index 00000000..9c4b7e01 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Sharpen.cs @@ -0,0 +1,295 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Sharpen")] +[System.Serializable] +public class _2dxFX_Sharpen : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Sharpen"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0.001f, 12f)] public float Sharpen = 4.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Sharpen); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Sharpen); + } + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Sharpen)), CanEditMultipleObjects] +public class _2dxFX_Sharpen_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Sharpen _2dxScript = (_2dxFX_Sharpen)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Sharpen"), new GUIContent("Sharpness Value", icone, "Change the sharp value of the sprite")); + + EditorGUILayout.BeginVertical("Box"); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Sharpen.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Sharpen.cs.meta new file mode 100644 index 00000000..46c9b63b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Sharpen.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fb0ea341d51942b48b6bfa7f0e7ae261 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Shiny_Reflect.cs b/Assets/2DxFX/Scripts/_2dxFX_Shiny_Reflect.cs new file mode 100644 index 00000000..62420e94 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Shiny_Reflect.cs @@ -0,0 +1,424 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Shiny Reflect")] +[System.Serializable] +public class _2dxFX_Shiny_Reflect : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + [HideInInspector] public Texture2D __MainTex2; + private string shader = "2DxFX/Standard/Shiny_Reflect"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(-0.5f, 1.5f)] public float Light = 1.0f; + [HideInInspector] [Range(0.05f, 1f)] public float LightSize = 0.5f; + [HideInInspector] public bool UseShinyCurve = true; + [HideInInspector] public AnimationCurve ShinyLightCurve; + + [HideInInspector] [Range(0, 32)] public float AnimationSpeedReduction = 3f; + [HideInInspector] [Range(0f, 2f)] public float Intensity = 1.0f; + [HideInInspector] [Range(0f, 1f)] public float OnlyLight = 0.0f; + [HideInInspector] [Range(-1f, 1f)] public float LightBump = 0.05f; + private float ShinyLightCurveTime; + + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + // VS AnimationCurve To C# for ShinyLightCurve + // Put this code on 'Normal' or 'Awake' fonction + if (ShinyLightCurve == null) ShinyLightCurve = new AnimationCurve(); + + if (ShinyLightCurve.length == 0) + { + ShinyLightCurve.AddKey(7.780734E-06f, -0.4416301f); + ShinyLightCurve.keys[0].inTangent = 0f; + ShinyLightCurve.keys[0].outTangent = 0f; + + ShinyLightCurve.AddKey(0.4310643f, 1.113406f); + ShinyLightCurve.keys[1].inTangent = 0.2280953f; + ShinyLightCurve.keys[1].outTangent = 0.2280953f; + + ShinyLightCurve.AddKey(0.5258899f, 1.229086f); + ShinyLightCurve.keys[2].inTangent = -0.1474274f; + ShinyLightCurve.keys[2].outTangent = -0.1474274f; + + ShinyLightCurve.AddKey(0.6136486f, 1.113075f); + ShinyLightCurve.keys[3].inTangent = 0.005268873f; + ShinyLightCurve.keys[3].outTangent = 0.005268873f; + + ShinyLightCurve.AddKey(0.9367767f, -0.4775873f); + ShinyLightCurve.keys[4].inTangent = -3.890693f; + ShinyLightCurve.keys[4].outTangent = -3.890693f; + + ShinyLightCurve.AddKey(1.144408f, -0.4976555f); + ShinyLightCurve.keys[5].inTangent = 0f; + ShinyLightCurve.keys[5].outTangent = 0f; + + ShinyLightCurve.postWrapMode = WrapMode.Loop; + ShinyLightCurve.preWrapMode = WrapMode.Loop; + + } + + + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + if (UseShinyCurve) + { + if (ShinyLightCurve != null) CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", ShinyLightCurve.Evaluate(ShinyLightCurveTime)); + ShinyLightCurveTime += (Time.deltaTime / 8) * AnimationSpeedReduction; + } + else + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Light); + } + + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", LightSize); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", Intensity); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", OnlyLight); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value5", LightBump); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + if (UseShinyCurve) + { + CanvasImage.material.SetFloat("_Distortion", ShinyLightCurve.Evaluate(ShinyLightCurveTime)); + ShinyLightCurveTime += (Time.deltaTime / 8) * AnimationSpeedReduction; + } + else + { + CanvasImage.material.SetFloat("_Distortion", Light); + } + + CanvasImage.material.SetFloat("_Value2", LightSize); + CanvasImage.material.SetFloat("_Value3", Intensity); + CanvasImage.material.SetFloat("_Value4", OnlyLight); + CanvasImage.material.SetFloat("_Value5", LightBump); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_Gradient") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + + + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Shiny_Reflect)), CanEditMultipleObjects] +public class _2dxFX_Shiny_Reflect_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Shiny_Reflect _2dxScript = (_2dxFX_Shiny_Reflect)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("UseShinyCurve"), new GUIContent("Use Shiny Curve", "Change The Material Property")); + + if (_2dxScript.UseShinyCurve) + { + EditorGUILayout.PropertyField(m_object.FindProperty("ShinyLightCurve"), new GUIContent("Shiny Light Curve", icone, "Use Curve")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AnimationSpeedReduction"), new GUIContent("Animation Speed Reduction", icone, "Change the speed of the animation based on the curve timeline")); + } + else + { + EditorGUILayout.PropertyField(m_object.FindProperty("Light"), new GUIContent("Shiny Light", icone, "Position of the Shine Light!")); + } + + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("LightSize"), new GUIContent("Shiny Light Size", icone, "Size of the Shine Light!")); + EditorGUILayout.PropertyField(m_object.FindProperty("Intensity"), new GUIContent("Light Intensity", icone, "Intensity of the light")); + EditorGUILayout.PropertyField(m_object.FindProperty("OnlyLight"), new GUIContent("Only Show Light", icone, "the value between the sprite and no sprite to show only the light")); + EditorGUILayout.PropertyField(m_object.FindProperty("LightBump"), new GUIContent("Light Bump Intensity", icone, "the intensity of the light bump")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Shiny_Reflect.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Shiny_Reflect.cs.meta new file mode 100644 index 00000000..f7bcbaf1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Shiny_Reflect.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ad062ff8f1ac49a47b97d53551db7119 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_SkyCloud.cs b/Assets/2DxFX/Scripts/_2dxFX_SkyCloud.cs new file mode 100644 index 00000000..e69f1f4a --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_SkyCloud.cs @@ -0,0 +1,438 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/SkyCloud")] +[System.Serializable] +public class _2dxFX_SkyCloud : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/SkyCloud"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] public float _OffsetX; + [HideInInspector] public float _OffsetY; + [HideInInspector] [Range(0.1f, 2f)] public float _Zoom = 0.2f; + [HideInInspector] [Range(-1, 1)] public float _Intensity = 0.3f; + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(-2, 2)] public float _AutoScrollSpeedX = 0.08f; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(-2, 2)] public float _AutoScrollSpeedY = 0.02f; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Zoom", _Zoom); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Intensity", _Intensity); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _AutoScrollCountY); + } + } + + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Zoom", _Zoom); + CanvasImage.material.SetFloat("_Intensity", _Intensity); + + if ((_AutoScrollX == false) && (_AutoScrollY == false)) + { + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + + if ((_AutoScrollX == true) && (_AutoScrollY == false)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + } + if ((_AutoScrollX == false) && (_AutoScrollY == true)) + { + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + if ((_AutoScrollX == true) && (_AutoScrollY == true)) + { + _AutoScrollCountX += _AutoScrollSpeedX * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetX", _AutoScrollCountX); + _AutoScrollCountY += _AutoScrollSpeedY * Time.deltaTime; + CanvasImage.material.SetFloat("_OffsetY", _AutoScrollCountY); + } + + } + if (_AutoScrollCountX > 1) _AutoScrollCountX = 0; + if (_AutoScrollCountX < -1) _AutoScrollCountX = 0; + if (_AutoScrollCountY > 1) _AutoScrollCountY = 0; + if (_AutoScrollCountY < -1) _AutoScrollCountY = 0; + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + } + + if (gameObject.activeSelf) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (ForceMaterial != null && tempMaterial != null) + { + DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_ShadowTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + + + +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_SkyCloud)), CanEditMultipleObjects] +public class _2dxFX_SkyCloud_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_SkyCloud _2dxScript = (_2dxFX_SkyCloud)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the start offset of the shadow effect")); + + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the start offset of the shadow effect")); + + icone = Resources.Load("2dxfx-icon-size") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Zoom"), new GUIContent("Zoom", icone, "Zoom the shadow effect")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Intensity"), new GUIContent("Intensity", icone, "Active the X mouvement of the cloud")); + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollX"), new GUIContent("Auto Scroll X", icone, "Change the value of the posterize effect")); + + if (_2dxScript._AutoScrollX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedX"), new GUIContent("Auto Scroll Speed X", icone, "Change the speed of the shadow")); + } + + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollY"), new GUIContent("Auto Scroll Y", icone, "Active the Y mouvement of the cloud")); + + if (_2dxScript._AutoScrollY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_AutoScrollSpeedY"), new GUIContent("Auto Scroll Speed Y", icone, "Change the speed of the shadow")); + } + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_SkyCloud.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_SkyCloud.cs.meta new file mode 100644 index 00000000..705137b5 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_SkyCloud.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c7ef90af565ae2c49b149538722fb134 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Slim.cs b/Assets/2DxFX/Scripts/_2dxFX_Slim.cs new file mode 100644 index 00000000..20f14439 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Slim.cs @@ -0,0 +1,346 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Slim")] +[System.Serializable] +public class _2dxFX_Slim : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Slim"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0f, 1f)] public float TurnToLiquid = 0.052f; + [HideInInspector] [Range(0.0f, 1f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + CanvasSpriteRenderer.sharedMaterial.SetFloat("TurnToLiquid", TurnToLiquid); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + CanvasImage.material.SetFloat("TurnToLiquid", TurnToLiquid); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Slim)), CanEditMultipleObjects] +public class _2dxFX_Slim_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Slim _2dxScript = (_2dxFX_Slim)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TurnToLiquid"), new GUIContent("Turn To Slime", icone, "Turn to slime = 0 = normal sprite : 1 = Slime FX")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Slime Distortion", icone, "Change the distortion of the Slime")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Slim.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Slim.cs.meta new file mode 100644 index 00000000..5edd0f58 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Slim.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a4192eb3c7cdee042a709908e4ccd1d4 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Smoke.cs b/Assets/2DxFX/Scripts/_2dxFX_Smoke.cs new file mode 100644 index 00000000..1e63c443 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Smoke.cs @@ -0,0 +1,369 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Smoke")] +[System.Serializable] +public class _2dxFX_Smoke : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Smoke"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(64, 256)] public float _Value1 = 64; + [HideInInspector] [Range(0, 1)] public float _Value2 = 1; + [HideInInspector] [Range(0, 1)] public float _Value3 = 1; + [HideInInspector] public float _Value4; + [HideInInspector] public Color _Color1 = new Color(1f, 0f, 1f, 1f); + [HideInInspector] public Color _Color2 = new Color(1f, 1f, 1f, 1f); + + [HideInInspector] public bool _AutoScrollX; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedX; + [HideInInspector] public bool _AutoScrollY; + [HideInInspector] [Range(0, 10)] public float _AutoScrollSpeedY; + [HideInInspector] private float _AutoScrollCountX; + [HideInInspector] private float _AutoScrollCountY; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value1", _Value1); + if (_Value2 == 1) _Value2 = 0.995f; + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value2", _Value2); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value3", _Value3); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Value4", _Value4); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color1", _Color1); + CanvasSpriteRenderer.sharedMaterial.SetColor("_Color2", _Color2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Value1", _Value1); + if (_Value2 == 1) _Value2 = 0.995f; + CanvasImage.material.SetFloat("_Value2", _Value2); + CanvasImage.material.SetFloat("_Value3", _Value3); + CanvasImage.material.SetFloat("_Value4", _Value4); + CanvasImage.material.SetColor("_Color1", _Color1); + CanvasImage.material.SetColor("_Color2", _Color2); + } + + + + } + + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_SmokeTXT") as Texture2D; + } + + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } + +} + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Smoke)), CanEditMultipleObjects] +public class _2dxFX_Smoke_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Smoke _2dxScript = (_2dxFX_Smoke)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + + + Texture2D icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Value2"), new GUIContent("Turn To Smoke", icone, "Turn To Smoke Value")); + + EditorGUILayout.PropertyField(m_object.FindProperty("_Color1"), new GUIContent("Smoke Color", icone, "Select the color of the Smoke")); + EditorGUILayout.PropertyField(m_object.FindProperty("_Color2"), new GUIContent("Smoke Color 2", icone, "Select the color of the Smoke")); + + + + + + + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Smoke.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Smoke.cs.meta new file mode 100644 index 00000000..89e51773 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Smoke.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 29ef4c543afa94d4da2a2063a2e34c89 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_StoneFX.cs b/Assets/2DxFX/Scripts/_2dxFX_StoneFX.cs new file mode 100644 index 00000000..6423cc90 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_StoneFX.cs @@ -0,0 +1,301 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/StoneFX")] +[System.Serializable] +public class _2dxFX_StoneFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/StoneFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 1)] public float IntoStone = 1.0f; + [HideInInspector] [Range(0, 1)] public float Deep = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", IntoStone); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Deep", Deep); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", IntoStone); + CanvasImage.material.SetFloat("_Deep", Deep); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_StoneFX)), CanEditMultipleObjects] +public class _2dxFX_StoneFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_StoneFX _2dxScript = (_2dxFX_StoneFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("IntoStone"), new GUIContent("Into Stone", icone, "Turn into Stone")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Deep"), new GUIContent("Fracture", icone, "Change the fracture of the stone")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_StoneFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_StoneFX.cs.meta new file mode 100644 index 00000000..1f9fa59a --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_StoneFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fbc2865745da8f7448873f7b7227c22d +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Teleportation.cs b/Assets/2DxFX/Scripts/_2dxFX_Teleportation.cs new file mode 100644 index 00000000..20978c0a --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Teleportation.cs @@ -0,0 +1,301 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Teleportation")] +[System.Serializable] +public class _2dxFX_Teleportation : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Teleportation"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Teleportation = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Teleportation); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Teleportation); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Teleportation)), CanEditMultipleObjects] +public class _2dxFX_Teleportation_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Teleportation _2dxScript = (_2dxFX_Teleportation)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Teleportation"), new GUIContent("Teleportation Value", icone, "Change the value of the Teleportation effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Teleportation.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Teleportation.cs.meta new file mode 100644 index 00000000..c45bde96 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Teleportation.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef7023be542ef9542bc696d27c191da0 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Threshold.cs b/Assets/2DxFX/Scripts/_2dxFX_Threshold.cs new file mode 100644 index 00000000..94e28e67 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Threshold.cs @@ -0,0 +1,294 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Threshold")] +[System.Serializable] +public class _2dxFX_Threshold : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Threshold"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0, 1)] public float Threshold = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Threshold); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Threshold); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Threshold)), CanEditMultipleObjects] +public class _2dxFX_Threshold_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Threshold _2dxScript = (_2dxFX_Threshold)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-contrast") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Threshold"), new GUIContent("Threshold Value", icone, "Change the value of the Threshold effect")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Threshold.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Threshold.cs.meta new file mode 100644 index 00000000..7d324891 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Threshold.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 22dd9ef471f2e054ca179bcb73bdf0a9 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Twist.cs b/Assets/2DxFX/Scripts/_2dxFX_Twist.cs new file mode 100644 index 00000000..b6097db6 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Twist.cs @@ -0,0 +1,311 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Twist")] +[System.Serializable] +public class _2dxFX_Twist : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Twist"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(-1, 1)] public float Distortion = 1.6f; + [HideInInspector] [Range(-1, 2)] public float _PosX = 0.5f; + [HideInInspector] [Range(-1, 2)] public float _PosY = 0.5f; + [HideInInspector] public Color _ColorX = new Color(1f, 1f, 1f, 1f); + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Distortion); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_PosX", _PosX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_PosY", _PosY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Distortion); + CanvasImage.material.SetFloat("_PosX", _PosX); + CanvasImage.material.SetFloat("_PosY", _PosY); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Twist)), CanEditMultipleObjects] +public class _2dxFX_Twist_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Twist _2dxScript = (_2dxFX_Twist)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Distortion"), new GUIContent("Distortion value", icone, "Change the distortion value")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_PosX"), new GUIContent("Position X", icone, "Change the horizontal position")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_PosY"), new GUIContent("Position Y", icone, "Change the vertical position")); + + EditorGUILayout.BeginVertical("Box"); + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Twist.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Twist.cs.meta new file mode 100644 index 00000000..21ce3cc1 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Twist.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d7cbead1778111847b6b2c3b4eaf62a4 +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackground.cs b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackground.cs new file mode 100644 index 00000000..bafcc077 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackground.cs @@ -0,0 +1,316 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/WaterAndBackground")] +[System.Serializable] +public class _2dxFX_WaterAndBackground : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/WaterAndBackground"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_WaterAndBackground)), CanEditMultipleObjects] +public class _2dxFX_WaterAndBackground_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_WaterAndBackground _2dxScript = (_2dxFX_WaterAndBackground)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("*This FX Could be slow on mobile devices, it should be used for desktop or consoles."); + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Liquid Distortion", icone, "Change the distortion of the liquid")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Light"), new GUIContent("Light Intensity", icone, "Change the intensity of the light")); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("EValue"), new GUIContent("Effect Value", icone, "Change the effect intensity")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackground.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackground.cs.meta new file mode 100644 index 00000000..cedfb24b --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackground.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9ed8433d9ef91ae4f855c0b5df694a43 +timeCreated: 1529660392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackgroundDeluxe.cs b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackgroundDeluxe.cs new file mode 100644 index 00000000..e35e0253 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackgroundDeluxe.cs @@ -0,0 +1,317 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/WaterAndBackgroundDeluxe")] +[System.Serializable] +public class _2dxFX_WaterAndBackgroundDeluxe : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/WaterAndBackgroundDeluxe"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0.0f, 4f)] public float Heat = 1.0f; + [HideInInspector] [Range(0.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(0.0f, 1f)] public float EValue = 1.0f; + [HideInInspector] [Range(-4.0f, 4f)] public float Light = 3.0f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Heat); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", Heat); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("Light", Light); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_WaterAndBackgroundDeluxe)), CanEditMultipleObjects] +public class _2dxFX_WaterAndBackgroundDeluxe_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_WaterAndBackgroundDeluxe _2dxScript = (_2dxFX_WaterAndBackgroundDeluxe)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("*This FX Could be slow on mobile devices, it should be used for desktop or consoles."); + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Heat"), new GUIContent("Liquid Distortion", icone, "Change the distortion of the liquid")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Light"), new GUIContent("Light Intensity", icone, "Change the intensity of the light")); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("EValue"), new GUIContent("Effect Value", icone, "Change the effect intensity")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackgroundDeluxe.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackgroundDeluxe.cs.meta new file mode 100644 index 00000000..f1390a80 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_WaterAndBackgroundDeluxe.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: edd89ae2bc1512046933b90839865690 +timeCreated: 1529660394 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Waterfall.cs b/Assets/2DxFX/Scripts/_2dxFX_Waterfall.cs new file mode 100644 index 00000000..f9b67480 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Waterfall.cs @@ -0,0 +1,359 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Waterfall")] +[System.Serializable] +public class _2dxFX_Waterfall : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Waterfall"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] public Texture2D __MainTex2; + [HideInInspector] [Range(0.0f, 2f)] public float Liquid = 1.0f; + [HideInInspector] [Range(-2.0f, 4f)] public float Speed = 1.0f; + [HideInInspector] [Range(-2f, 2f)] public float EValue = -0.65f; + [HideInInspector] [Range(-2f, 2f)] public float TValue = 0.6f; + [HideInInspector] public Color LightColor = new Color(0.2f, 0.5f, 1, 1); + [HideInInspector] [Range(-1f, 1f)] public float Light = 0.5f; + + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + __MainTex2 = Resources.Load("_2dxFX_WaterfallTXT") as Texture2D; + ShaderChange = 0; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + __MainTex2 = Resources.Load("_2dxFX_WaterfallTXT") as Texture2D; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", Liquid); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Speed", Speed); + CanvasSpriteRenderer.sharedMaterial.SetFloat("EValue", EValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("TValue", TValue); + CanvasSpriteRenderer.sharedMaterial.SetFloat("Light", Light); + CanvasSpriteRenderer.sharedMaterial.SetColor("Lightcolor", LightColor); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", _Alpha); + CanvasImage.material.SetFloat("_Distortion", Liquid); + CanvasImage.material.SetFloat("_Speed", Speed); + CanvasImage.material.SetFloat("EValue", EValue); + CanvasImage.material.SetFloat("TValue", TValue); + CanvasImage.material.SetFloat("Light", Light); + CanvasImage.material.SetColor("Lightcolor", LightColor); + } + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterfallTXT") as Texture2D; + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + __MainTex2 = Resources.Load("_2dxFX_WaterfallTXT") as Texture2D; + } + if (__MainTex2) + { + __MainTex2.wrapMode = TextureWrapMode.Repeat; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetTexture("_MainTex2", __MainTex2); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetTexture("_MainTex2", __MainTex2); + } + } + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Waterfall)), CanEditMultipleObjects] +public class _2dxFX_Waterfall_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Waterfall _2dxScript = (_2dxFX_Waterfall)target; + + Texture2D icon = Resources.Load("2dxfxinspector-anim") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + EditorGUILayout.LabelField("*This FX Could be slow on mobile devices, it should be used for desktop or consoles."); + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-distortion") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Liquid"), new GUIContent("Liquid Distortion", icone, "Change the distortion of the liquid")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Speed"), new GUIContent("Time Speed", icone, "Change the time speed")); + icone = Resources.Load("2dxfx-icon-brightness") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Light"), new GUIContent("Light Intensity", icone, "Change the intensity of the light")); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("EValue"), new GUIContent("Effect Value", icone, "Change the effect intensity")); + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("TValue"), new GUIContent("Texture Light Value", icone, "Change the Texture Light intensity")); + icone = Resources.Load("2dxfx-icon-color") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("LightColor"), new GUIContent("Light Color", icone, "Change the light color")); + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Waterfall.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Waterfall.cs.meta new file mode 100644 index 00000000..30368192 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Waterfall.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c4d9ccc55f1d6564da583673f80506ed +timeCreated: 1529660393 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_Wave.cs b/Assets/2DxFX/Scripts/_2dxFX_Wave.cs new file mode 100644 index 00000000..835a1554 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Wave.cs @@ -0,0 +1,366 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/Wave")] +[System.Serializable] +public class _2dxFX_Wave : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/Wave"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetX = 10f; + [HideInInspector] [Range(0f, 128f)] public float _OffsetY = 10f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceX = 0.03f; + [HideInInspector] [Range(0f, 1f)] public float _DistanceY = 0.03f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeX = 0.16f; + [HideInInspector] [Range(0f, 6.28f)] public float _WaveTimeY = 0.12f; + [HideInInspector] public bool AutoPlayWaveX = false; + [HideInInspector] [Range(0f, 5f)] public float AutoPlaySpeedX = 5f; + [HideInInspector] public bool AutoPlayWaveY = false; + [HideInInspector] [Range(0f, 50f)] public float AutoPlaySpeedY = 5f; + [HideInInspector] public bool AutoRandom = false; + [HideInInspector] [Range(0f, 50f)] public float AutoRandomRange = 10f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetX", _OffsetX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_OffsetY", _OffsetY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceX", _DistanceX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_DistanceY", _DistanceY); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_WaveTimeY", _WaveTimeY); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_OffsetX", _OffsetX); + CanvasImage.material.SetFloat("_OffsetY", _OffsetY); + CanvasImage.material.SetFloat("_DistanceX", _DistanceX); + CanvasImage.material.SetFloat("_DistanceY", _DistanceY); + CanvasImage.material.SetFloat("_WaveTimeX", _WaveTimeX); + CanvasImage.material.SetFloat("_WaveTimeY", _WaveTimeY); + } + + float timerange; + if (AutoRandom) + { + timerange = (Random.Range(1, AutoRandomRange) / 5) * Time.deltaTime; + } + else + { + timerange = Time.deltaTime; + } + + if (AutoPlayWaveX) _WaveTimeX += AutoPlaySpeedX * timerange; + if (AutoPlayWaveY) _WaveTimeY += AutoPlaySpeedY * timerange; + if (_WaveTimeX > 6.28f) _WaveTimeX = 0f; + if (_WaveTimeY > 6.28f) _WaveTimeY = 0f; + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_Wave)), CanEditMultipleObjects] +public class _2dxFX_Wave_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_Wave _2dxScript = (_2dxFX_Wave)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-clip_left") as Texture2D; + + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetX"), new GUIContent("Offset X", icone, "Change the offset of X")); + icone = Resources.Load("2dxfx-icon-clip_right") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_OffsetY"), new GUIContent("Offset Y", icone, "Change the offset of Y")); + icone = Resources.Load("2dxfx-icon-size_x") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceX"), new GUIContent("Distance X", icone, "Change the distance of X")); + icone = Resources.Load("2dxfx-icon-size_y") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_DistanceY"), new GUIContent("Distance Y", icone, "Change the distance of Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeX"), new GUIContent("Wave Time X", icone, "Change the time speed of the wave X")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_WaveTimeY"), new GUIContent("Wave Time Y", icone, "Change the time speed of the wave Y")); + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveX"), new GUIContent("Active AutoPlay Wave X", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveX) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedX"), new GUIContent("AutoPlay Speed X", icone, "Speed of the auto play X")); + } + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlayWaveY"), new GUIContent("Active AutoPlay Wave Y", icone, "Active the time speed")); + if (_2dxScript.AutoPlayWaveY) + { + icone = Resources.Load("2dxfx-icon-time") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoPlaySpeedY"), new GUIContent("AutoPlay Speed Y", icone, "Speed of the auto play Y")); + } + icone = Resources.Load("2dxfx-icon-pixel") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandom"), new GUIContent("Auto Random", icone, "Active the random value")); + if (_2dxScript.AutoRandom) + { + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("AutoRandomRange"), new GUIContent("Auto Random Range", icone, "Change the random value")); + } + + EditorGUILayout.BeginVertical("Box"); + + + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_Wave.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_Wave.cs.meta new file mode 100644 index 00000000..2048bfce --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_Wave.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7f8abe6aab9f91f49828555e2eeaa5b3 +timeCreated: 1529660391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/2DxFX/Scripts/_2dxFX_WoodFX.cs b/Assets/2DxFX/Scripts/_2dxFX_WoodFX.cs new file mode 100644 index 00000000..60472a6c --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_WoodFX.cs @@ -0,0 +1,306 @@ +////////////////////////////////////////////// +/// 2DxFX - 2D SPRITE FX - by VETASOFT 2018 // +////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[ExecuteInEditMode] +[AddComponentMenu("2DxFX/Standard/WoodFX")] +[System.Serializable] +public class _2dxFX_WoodFX : MonoBehaviour +{ + [HideInInspector] public Material ForceMaterial; + [HideInInspector] public bool ActiveChange = true; + private string shader = "2DxFX/Standard/WoodFX"; + [HideInInspector] [Range(0, 1)] public float _Alpha = 1f; + + [HideInInspector] [Range(0, 1)] public float IntoWood = 1.0f; + [HideInInspector] [Range(0, 1)] public float Deep = 1.0f; + + [HideInInspector] public int ShaderChange = 0; + Material tempMaterial; + + Material defaultMaterial; + Image CanvasImage; + SpriteRenderer CanvasSpriteRenderer;[HideInInspector] public bool ActiveUpdate = true; + + void Awake() + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + void Start() + { + ShaderChange = 0; + XUpdate(); + } + + public void CallUpdate() + { + XUpdate(); + } + + + void Update() + { + if (ActiveUpdate) XUpdate(); + } + + void XUpdate() + { + + if (CanvasImage == null) + { + if (this.gameObject.GetComponent() != null) CanvasImage = this.gameObject.GetComponent(); + } + if (CanvasSpriteRenderer == null) + { + if (this.gameObject.GetComponent() != null) CanvasSpriteRenderer = this.gameObject.GetComponent(); + } + + if ((ShaderChange == 0) && (ForceMaterial != null)) + { + ShaderChange = 1; + if (tempMaterial != null) DestroyImmediate(tempMaterial); + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + ForceMaterial.hideFlags = HideFlags.None; + ForceMaterial.shader = Shader.Find(shader); + + + } + if ((ForceMaterial == null) && (ShaderChange == 1)) + { + if (tempMaterial != null) DestroyImmediate(tempMaterial); + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + ShaderChange = 0; + } + +#if UNITY_EDITOR + string dfname = ""; + if (CanvasSpriteRenderer != null) dfname = CanvasSpriteRenderer.sharedMaterial.shader.name; + if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) dfname = "Sprites/Default"; + } + if (dfname == "Sprites/Default") + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + Image img = CanvasImage; + if (img.material == null) + { + CanvasImage.material = ForceMaterial; + } + } + } +#endif + if (ActiveChange) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Alpha", 1 - _Alpha); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Distortion", IntoWood); + CanvasSpriteRenderer.sharedMaterial.SetFloat("_Deep", Deep); + } + else if (CanvasImage != null) + { + CanvasImage.material.SetFloat("_Alpha", 1 - _Alpha); + CanvasImage.material.SetFloat("_Distortion", IntoWood); + CanvasImage.material.SetFloat("_Deep", Deep); + } + + + } + + } + + void OnDestroy() + { + + if ((Application.isPlaying == false) && (Application.isEditor == true)) + { + + if (tempMaterial != null) DestroyImmediate(tempMaterial); + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + } + void OnDisable() + { + + if (gameObject.activeSelf && defaultMaterial != null) + { + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = defaultMaterial; + CanvasSpriteRenderer.sharedMaterial.hideFlags = HideFlags.None; + } + else if (CanvasImage != null) + { + CanvasImage.material = defaultMaterial; + CanvasImage.material.hideFlags = HideFlags.None; + } + } + } + + void OnEnable() + { + + if (defaultMaterial == null) + { + defaultMaterial = new Material(Shader.Find("Sprites/Default")); + + + } + if (ForceMaterial == null) + { + ActiveChange = true; + tempMaterial = new Material(Shader.Find(shader)); + tempMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = tempMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = tempMaterial; + } + } + else + { + ForceMaterial.shader = Shader.Find(shader); + ForceMaterial.hideFlags = HideFlags.None; + if (CanvasSpriteRenderer != null) + { + CanvasSpriteRenderer.sharedMaterial = ForceMaterial; + } + else if (CanvasImage != null) + { + CanvasImage.material = ForceMaterial; + } + } + + } +} + + + + +#if UNITY_EDITOR +[CustomEditor(typeof(_2dxFX_WoodFX)), CanEditMultipleObjects] +public class _2dxFX_WoodFX_Editor : Editor +{ + private SerializedObject m_object; + + public void OnEnable() + { + + m_object = new SerializedObject(targets); + } + + public override void OnInspectorGUI() + { + m_object.Update(); + DrawDefaultInspector(); + + _2dxFX_WoodFX _2dxScript = (_2dxFX_WoodFX)target; + + Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; + if (icon) + { + Rect r; + float ih = icon.height; + float iw = icon.width; + float result = ih / iw; + float w = Screen.width; + result = result * w; + r = GUILayoutUtility.GetRect(ih, result); + EditorGUI.DrawTextureTransparent(r, icon); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); + + if (_2dxScript.ForceMaterial == null) + { + _2dxScript.ActiveChange = true; + } + else + { + if (GUILayout.Button("Remove Shared Material")) + { + _2dxScript.ForceMaterial = null; + _2dxScript.ShaderChange = 1; + _2dxScript.ActiveChange = true; + _2dxScript.CallUpdate(); + } + + EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); + } + + if (_2dxScript.ActiveChange) + { + + EditorGUILayout.BeginVertical("Box"); + + Texture2D icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("IntoWood"), new GUIContent("Into wood", icone, "Turn into wood")); + icone = Resources.Load("2dxfx-icon-value") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("Deep"), new GUIContent("Fracture", icone, "Change the fracture of the stone")); + + EditorGUILayout.BeginVertical("Box"); + + icone = Resources.Load("2dxfx-icon-fade") as Texture2D; + EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); + + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + + } + + m_object.ApplyModifiedProperties(); + + } +} +#endif diff --git a/Assets/2DxFX/Scripts/_2dxFX_WoodFX.cs.meta b/Assets/2DxFX/Scripts/_2dxFX_WoodFX.cs.meta new file mode 100644 index 00000000..a9c2f796 --- /dev/null +++ b/Assets/2DxFX/Scripts/_2dxFX_WoodFX.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21e2d589dd21f1045a6ca5afb06934e1 +timeCreated: 1529660390 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Font/NewFonts/CAIRO-BLACK SDF.asset b/Assets/Font/NewFonts/CAIRO-BLACK SDF.asset index 4f816fa3..1f07abe0 100644 --- a/Assets/Font/NewFonts/CAIRO-BLACK SDF.asset +++ b/Assets/Font/NewFonts/CAIRO-BLACK SDF.asset @@ -42,7 +42,7 @@ Texture2D: m_ColorSpace: 1 m_PlatformBlob: image data: 1048576 - _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e13131313131313131313131313131313070704080c0e0f13131313131313131313131313131313080705090c0e0f13131313131313131313131313131313130604010000000000000000000000000105090b0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0b09060100000000000000000000000000000000000000000000000000000000000004090c0e0f1313131313131313131313131313130b0a080400000000000000000000000000000000000000000000000000000005080a0b13131313131313131313131313131311110e0b0601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070808080808080707060300000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070809090a0909080706040000000000000000000000000000000000000000000000000000000000000106090b0c13131313131313131313131313131313131313131313131313131313131313131313131313130c0b09060100000000000000000000000000000000000000000000000000000000010406070708080808070606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030606070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070708080808080706040100000000000000000000000000000000000000000000000000000000000000000003090d101213131313131313131313131313131313130604010000000000020507081313131313131313131313131313131313130a090704000000000000000000000003090d10121313131313131313131313131313131313060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b2020202020202020202020202020202014131114181b1b2020202020202020202020202020202014141115191b1c202020202020202020202020202020202013110d0701000000000000000000060c111517181a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a191816120d0700000000000000000000000000000000000000000000000000000002091015191b1c202020202020202020202020202020171714110c050000000000000000000000000000000000000000000000060c111417182020202020202020202020202020201e1d1b17120c040000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090c080d111314151515151515141312100b060e0d0b0a090706040100000000000000000000000000000000000000000000000000000000000000020507080a0c070d111314151616161616151312100c07080602000000000000000000000000000000000000000000000000060d121518192020202020202020202020202020202020202020202020202020202020202020202020202020191816120d07000000000000000000000000000000000000000000040607090c070d10131414151515151413120f0b0609060603000000000000000000000000000000000000000000000000000000000000000000000000000000000205060b0f12131413110d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506080b060b1012131414151515141413110d070a070604000000000000000000000000000000000000000000000000000000070e14191d1f202020202020202020202020202020202013110d07010003090e121415202020202020202020202020202020202020171614100b050000000000000000070e14191d1f202020202020202020202020202020202013110d07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d202427282d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c04000000000000000911181d212425272727272727272727272727272727272727272727272727272727272727272727272727272525221e18110901000000000000000000000000000000000000000000000000030c141b212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c1710080000000000000000000000000000000000000000000810171d2123242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2a27231d160e060000000000000000000000000000000000000000000000000000000000000000000000000003060b10121316181b191d202121222222222121201f1c171c1b191817151413110d080c0a070604010000000000000000000000000000000000000001050707080e11141417191a181d202022222323232221201f1c181514120e09040000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2625221e18110a010000000000000000000000000000000406070c10131316181b181d2020212122222121201f1c17191513120f0b0600000000000000000000000000000000000000000000000000000000000000000000010407090e1214171c1f2021201d18130c04000000000000000000000000000000000000000000000000000000000000000000000000000306060b0f121315181a171c1f2021212222222120201d1819161413100c070300000000000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c060d141a1e21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2323201c160f080000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d252b30333439393939393939393939393939393939392c292c313435393939393939393939393939393939392e2d2a2c31343539393939393939393939393939393939392c29241d160d04000000000009121b22292e31323434343434343434343434343434343434343434343434343434343434343434343434343432312e29231b13090000000000000000000000000000000000000000000000020c151e262c31343539393939393939393939393939393931302d28221a12080000000000000000000000000000000000000008121a22282d30313939393939393939393939393939393837332e2820180e0400000000000000000000000000000000000000000000000000000000000000000000060c1012171c1f2022252824292c2d2e2e2f2f2f2e2d2d2b282329282625232221201d191a18171413100d070100000000000000000000000000000306080d11131417191e202123252724292c2d2e2f3030302f2e2d2c282322211e1a15100c0701000000000000000000000000000000000009131b23292e3132393939393939393939393939393939393939393939393939393939393939393939393939393932312e29231b130a00000000000000000000000206070c101313181c1f2023252724292c2d2e2e2f2f2e2e2d2b28222522201f1c17110f0a04000000000000000000000000000000000000000000000000000000000406080d1113141a1e2122282b2d2d2c29241d160d0400000000000000000000000000000000000000000000000000000000000000000305060c101213171b1f2022242723282b2d2d2e2e2f2e2e2d2c29242623201f1d1812100c06000000000000000000000000000000000000000007111a232a31353839393939393939393939393939393939392c29241d160f171f262a2d2e393939393939393939393939393939393939302f2c27211a11080000000007111a232a31353839393939393939393939393939393939392c29241d160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131d262f363c404146464646464646464646464646464646463935373d4042464646464646464646464646464646463b3936373d4142464646464646464646464646464646464639352f281f160c0100000006111b242d343a3d3e404040404040404040404040404040404040404040404040404040404040404040404040403f3e3a342d251b11070000000000000000000000000000000000000000000009141e2730373d41424646464646464646464646464646463e3c39332c241a1005000000000000000000000000000000000006101a242c33393d3e46464646464646464646464646464644433f39322a20160c0100000000000000000000000000000000000000000000000000000000000000070c11171c1f23282b2d2f32342f35393a3b3b3b3b3b3b3a3a38342e35343332302f2d2c292427252420201d18120c040000000000000000000000060b101213191d202124252a2d2e3032342f35393a3b3c3c3d3c3c3b3a38342e2e2d2b261f1d18120b0300000000000000000000000000000006111b252d343a3e3f46464646464646464646464646464646464646464646464646464646464646464646464646463f3e3a352d251b11070000000000000000030a0f1214181c1f2023282c2d2f32342f35393a3a3b3b3b3b3a3938332d322f2d2b28221c1b150f0a04000000000000000000000000000000000000000000000105070c101313191d2021252a2d2d3338393a39352f281f160c010000000000000000000000000000000000000000000000000000000000060b0f1213171c1f2022272b2d2f31332e34383a3a3b3b3b3b3b3a39352f33302d2c29241f1c17110c070100000000000000000000000000000000030e19232c353c4145464646464646464646464646464646464639352f281f17212931363a3b4646464646464646464646464646464646463d3c38332c231a0f050000030e19232c353c4145464646464646464646464646464646464639352f281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a252f3841484c4e5353535353535353535353535353535353454141484d4e5353535353535353535353535353535353464142494d4f535353535353535353535353535353535345403a31281d13070000010c18222d363f454a4b4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4a463f372d23180d01000000000000000000000000000000000000000004101b26303942494d4f5353535353535353535353535353534a49453e362c22170c00000000000000000000000000000000000c17222c363e45494b535353535353535353535353535353514f4b443c32281d12060000000000000000000000000000000000000000000000000000000000030b12181c23282c2e34383a3c3f41434145474848484848484746443f434241403e3d3c3a39352f3432302d2c29241d160d040000000000000003090e11171c1f2025292d2e313036393b3d3f4143404547484949494949484644403f3b3a37312c29241d150d0802000000000000000000000000010d18232d373f464a4c53535353535353535353535353535353535353535353535353535353535353535353535353534c4a463f372d23180d01000000000002080d151a1f2123282c2d2e34383a3c3f414240454747484848484746443f413f3c3938332d2b27201b150c070000000000000000000000000000000000000002080d1113181c1f2024292c2d31363a3b3f44464745413a31281d1307000000000000000000000000000000000000000000000000000000020a11171b1f2023282c2d2d3337393b3e40423f4446474748484847474540423f3d3a38352f2c28231c18120b0300000000000000000000000000000009141f2a353e474d51535353535353535353535353535353535345403a31281f29333b4246485353535353535353535353535353535353534a48443d352c21160b000009141f2a353e474d51535353535353535353535353535353535345403a31281d13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202b36414a53585a606060606060606060606060606060605f524c4b53595b606060606060606060606060606060605f524c4b54595c606060606060606060606060606060605f514b433a2f24180d010005111d29343f485056585a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a585651493f34291e120600000000000000000000000000000000000000000915212c37424b54595c606060606060606060606060606060575550483e33281c110400000000000000000000000000000005111d28333e485055576060606060606060606060606060605e5c564e44392e23170b00000000000000000000000000000000000000000000000000000000060c151d23282e34383a3f4446494b4e504c51545455555555545453504a504f4e4c4b4a4847454142403f3d3a39352f281f160c010000000000060e151a1c23282b2d3035393a3d404146474a4c4d4f4b51535555565656555453514a4c4847423c38352f271f19130c05000000000000000000000006121e29343f495156586060606060606060606060606060606060606060606060606060606060606060606060606060595751493f35291e120600000000050d141920262b2e2e34383a3d404546494b4e4f4b515354545555545453504a4e4c4846443f3837322b272018120b0300000000000000000000000000000000050c13191d2023282c2d2f35393a3d4246484a505354514b433a2f24180d0300000000000000000000000000000000000000000000000000020b141b22272b2d2e34383a3c3f4446484b4d4f4a505354545555555453514b4f4c494745403a38342e29231d150d0700000000000000000000000000000d1925313c4750585e5f6060606060606060606060606060605f514b433a2f26313b454d535f60606060606060606060606060606060606056554f473d33271c1004000d1925313c4750585e5f6060606060606060606060606060605f514b433a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d56535d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e56545d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4035291d1104000915212e3a45505a62656767676767676767676767676767676767676767676767676767676767676767676767676765625b51463a2e22160900000000000000000000000000000000000000000c1925313d49545d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d2114080000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6760564b3f33271b0e0200000000000000000000000000000000000000000000000000020a11171e272e34383f44464a505355585b5d555d6061616262626160605c545d5c5b5958565554514c4f4d4b4a4745403931281d120700000000060f181f262b2e34383a3c4146474a4d4c525456585a5c555d6061626363636261605c545955534d47454039312a251e160e06000000000000000000000915222e3a46515b62656c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e221609000000050e171e252a31373a3b404546494b515356585a5c555d60616162626161605b545b585553504a47433c373228231c150c040000000000000000000000000000050e171e252a2d2e34383a3d4145474a4d5354545b60605d554b41352920150a000000000000000000000000000000000000000000000000000a141d262d3337393c3f44464949505355575a5b545c60606161626161605d555c595653514b46443f38342f271f18120b03000000000000000000000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b40352a36424d575f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6360594f44382c20140700101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4035291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404c58646e747979797979797979797979797979797976685d59656f757979797979797979797979797979797976685e59656f757979797979797979797979797979797976675d5145392c201306000b1724313d4a56626c7173737373737373737373737373737373737373737373737373737373737373737373737373726d62564a3e3125180b00000000000000000000000000000000000000020e1b2834414d59656f75797979797979797979797979797979716c6155493c3023170a0000000000000000000000000000000a1723303d4955616c717979797979797979797979797979797772675c4f43372a1d1104000000000000000000000000000000000000000000000000020b141b2227303940454a5053545c60626567696b676d6e6e6e6e6e6e6d6d666b6a686766656362605d555c5a585753514b43392f24180d010000030e18212a3137383f4446494c5254575a565e61636567696a676d6e6f6f706f6f6e6d666865615f5753514b433e36302820180f060000000000000000000b1824313e4a56626d727979797979797979797979797979797979797979797979797979797979797979797979797979726d62574a3e3125180b0000020d17202930363c4347484b515356545c60626567696a676d6d6e6e6e6e6d6c666a676562605b54544e47433d342e271e160d04000000000000000000000000020c1720293036393a404546494c525457575e6165666c6d675d51453c31261b0f03000000000000000000000000000000000000000000000006111b262f383f4446494a505356535b60626466686a666d6d6e6e6e6e6e6d676a686663605d5553504a4540393128231c150c040000000000000000000000121f2b3845515e6a747979797979797979797979797979797976675d5145392d3a46535f6976797979797979797979797979797979797979706b6055483c2f23160900121f2b3845515e6a747979797979797979797979797979797976675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a677480868686868686868686868686868686867a6d605b687581868686868686868686868686868686867a6e615c68758186868686868686868686868686868686796d6053473a2d201407000b1825323e4b5865717e808080808080808080808080808080808080808080808080808080808080808080808080807f7265584c3f3225190c00000000000000000000000000000000000000020f1c2935424f5c6875818686868686868686868686868686867e7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e86868686868686868686868686868684776b5e5144382b1e11050000000000000000000000000000000000000000000000000a141d262d333c434b51545c6064666d6f72747678797a7b7b7b7b7b7b7a7978777675747371706f6d676a68676563605d554b4035291d1004000009151f2a333c42474a505356565e61646669686e7072747677797a7b7c7c7c7c7c7b797875726e6965605d555046413a322a21180f0600000000000000000c1925323f4c5865727f86868686868686868686868686868686868686868686868686868686868686868686868686867f7265594c3f3226190c000008141e29323b41464e5355545c606366666d6f72747577797a7a7b7b7b7b7a79787674726f6c66626058544e44403930281f160d03000000000000000000000008131e29323a4146474b515356565d606467696e7175797a6d60584e43372b1f140900000000000000000000000000000000000000000000000b17222d384149505355545c606366656c6e7173757678797a7a7b7b7b7a7a78777572706d6764605c54514b433e342e271e160d040000000000000000000013202c3946535f6c7986868686868686868686868686868686796d6053473a2e3b4855616e7b8686868686868686868686868686868686867d7063564a3d3023170a0013202c3946535f6c7986868686868686868686868686868686796d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9393939393939393939393939393877a6d605b6875818e9393939393939393939393939393877a6e615c6875828f9393939393939393939393939393867a6d6053473a2d20140700101c2936434f5c6976828d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d83776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f939393939393939393939393938a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a939393939393939393939393939184776b5e5144382b1e1105000000000000000000000000000000000000000000000006111b262f383f444e555c60666d7075797c7e8183848687878888888887878685848382817f7e7d7b7a7877757372706d675d5145392c20130600020e1a26313c454d53545c606266686d707376787a7d7f8082848586888889898988878684827f7b77716d67615a524c443c332a21180e04000000000000000c1925323f4c5865727f8b9393939393939393939393939393939393939393939393939393939393939393939393938c7f7265594c3f3226190c00010d1925303b444c52585f6265666d707376797c7e8182848586878788888787868583817f7c79746f6a626058514a423a31281f150b01000000000000000000010d1925303a444c5254545c606366686d7074777b7e828582756a5f53473b30251a0e02000000000000000000000000000000000000000000030f1b27333f49535b606265666d6f7376797b7e8082838586878788888887868584827f7c7975716d66605c554f44403930281f160d0400000000000000000013202c3946535f6c79869293939393939393939393939393867a6d6053473a35404b5565727f8b9393939393939393939393939393939285796d6053463a2d2013070013202c3946535f6c79869293939393939393939393939393867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f93877a6d605b6875818e9b9f9f9f9f9f9f9f9f9f9f9f9f94877a6e615c6875828f9b9f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a2d20140700101c2936434f5c6976828f9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9b9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a979f9f9f9f9f9f9f9f9f9f9f9e9184776b5e5144382b1e110500000000000000000000000000000000000000000000091217222d384149505860676d72797d8185888b8e909192999494959595949a939291908f8e8c8b898887858482807e7d796d6053473a2d2014070006121e2b37424d575f61666d6f73777a7d80828587898b8d8f9192989495969696959993918e8c88837e79716c615e564d453c332a20160c020000000000000c1925323f4c5865727f8b989f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988c7f7265594c3f3226190c0005111e2a36414c565e616a6e7275797c808386898b8d8f9192989494959594999291908e8b8885807c766f6a605c544c433a31271d120700000000000000000005111d2a36414c565e6165666d7073767a7d8184878b8e92877c6f62574d42362a1e130800000000000000000000000000000000000000000005121f2b3744505b656c6f7275797c7f8385888a8d8e9091939994949594949792908f8c8985827d79726d676159514a423a31281f160b02000000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a3945515d6776828f9c9f9f9f9f9f9f9f9f9f9f9f9fa89a8d8074665c5044382b1f12060013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7acacacacacacacacacaca093877a6d605b6875818e9ba8acacacacacacacacacaca194877a6e615c6875828f9ba8acacacacacacacacacaca093867a6d6053473a2d20140700101c2936434f5c6976828f9ca6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8acacacacacacacacaca4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4acacacacacacacacacaa9e9184776b5e5144382b1e1105000000000000000000000000000000000000000000050e1b2427333f49535b606a6f797f848a8e9297989a9c9e9fa3aba1a1a1a1a1a49f9f9e9d9b9a999896959792908f8d8b897c6f6256493c2f231609000814212d3a47535f696e75797c8083868a8d8f929796989a9c9d9fa2aaa2a2a3a2aba49f9e9b9895908b847e756d685f574d453b32281e13080000000000000c1925323f4c5865727f8b98a5acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca5988c7f7265594c3f3226190c000714202d3946525e686e787b7e8285898c909298989a9c9d9fa2aaa1a1a1aba39f9e9d9a9897918d88827c746d665d564c43392f24180b0200000000000000000713202d3946525e686d7275797c8083868a8d9196989b9a8e8174695e52463a3024190d0100000000000000000000000000000000000000000613202d394653606c777c7f8285898c8f929897999b9d9e9fa4a1a1a1a1a9a29f9d9b9998928e8a847f79706b605c544c433a31281d140a000000000000000013202c3946535f6c7986929facacacacacacacacacaca093867a6d6053473a3a4753606d7a86929facacacacacacacacacacacaca196897c6f63544a3f34281c10030013202c3946535f6c7986929facacacacacacacacacaca093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4b9b9b9b9b9b9b9b9ada093877a6d605b6875818e9ba8b4b9b9b9b9b9b9b9b9ada194877a6e615c6875828f9ba8b5b9b9b9b9b9b9b9b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5b9b9b9b9b9b9b9b0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1b9b9b9b9b9b9b9b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000020c17202c363e44505b656c727c848b91969b9fa2a9a7a9abacafb5aeaeaeaeb6afacabaaa9a8a7a6a4a3a9a29f9d9b9a95897c6f6256493c2f231609000815222e3b4855616e7b8285898c90939a999c9ea1a9a5a7a9aaacaeb4afafafafb5afacaba8a7a09d96918b827a6e695f574d443a3024190c0200000000000c1925323f4c5865727f8b98a5b2b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b2a5988c7f7265594c3f3226190c000814212e3b4754616e7a85888b8f9298999c9fa3aaa7a8aaacaeb4aeaeaeb5afacaba9a7a9a19e9a948f8780786d685d554b4035291d140a00000000000000000714212e3a4754616d7a7f8285898c9092999a9ea0a8ac9f92867b6e61564c4135291d120700000000000000000000000000000000000000000c1925323f4c5865727f888c8f9298999c9fa2aaa6a8a9abacafb5aeaeaeb3adabaaa8aaa29f9b96918c847d746d665d564c433a2f261c11060000000000000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d6053473a3d4a5763707d8a98a3aebab9b9b9b9b9b9b9b9b7ab9e9184786b605442382e23170b000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0c6c6c6c6c6c6baada093877a6d605b6875818e9ba8b4c1c6c6c6c6c6c6baada194877a6e615c6875828f9ba8b5c2c6c6c6c6c6c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2c6c6c6c6c6bdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdc6c6c6c6c6c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000000000008131e29323e48525c606c777f8791969ea1a8abadb3b4b6b7b9bbc0bbbbbbbbc0bbb9b8b7b6b5b4b2b1b0b3adabaaa8a295897c6f6256493c2f231609000915222f3c4855626f7b889298999d9fa4aca9abadb3b2b3b5b7b8babfbbbcbcbcc0bbb9b7b5b1aca8a19e948f847b6e695f564c4135291e140a00000000000c1925323f4c5865727f8b98a5b2bec6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6bfb2a5988c7f7265594c3f3226190c000714212e3a4754616d7a8797989b9fa2aaa9acaeb4b4b5b7b8babfbabbbbc0bbb9b8b6b4b3adaba69f99938d827a6d675d51453d2f261c1106000000000000000714212e3a4754616d7a858f9298999d9fa3abaaacb2aea3998d8073685d5246392f24180c00000000000000000000000000000000000000000a1724313d4a5764707d8a979c9fa2aaa9acaeb4b3b5b6b8b9bbc0bbbbbbbebab8b7b5b4aeaca8a19e96918a80786d685d554c42382d22170b0200000000000013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d6053473a434e586774818d9aaab4bfcbc6c6c6c6c6c8bcb1a7998d807366594f4330261c1106000013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cdd2d2d2d2c6baada093877a6d605b6875818e9ba8b4c1ced2d2d2d2c7baada194877a6e615c6875828f9ba8b5c2ced2d2d2d2c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc3b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2ced2d2d2cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad2d2d2d1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000000010d1925303a44505a636e74808c9299a0a8adb2b8babec1c3c4c5c7cbd1c8c8d2ccc8c6c5c4c3c2c1bfbebcbebab8b7afa295897c6f6256493c2f231609000714202d3a4753606d7a86939faaaaacafb6b5b8b9bebec0c2c4c5c6cad0c9c9d2ccc7c6c4c1bcb8b2ada69e9691857b6e685d52453e30261c1106000000000c1925323f4c5865727f8b98a5b2becbd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cbbfb2a5988c7f7265594c3f3226190c000713202d3a4653606d798699a3a8acaeb4b6b8babfc0c2c4c5c7cad0c8d1cbc7c5c4c3c1beb9b8b0aba49f949082796d60594f42382d22170b000000000000000713202d3946525e6873808d98a2aaa9acafb5b7b9bdb5ab9f92857a6d61554b4035291c1106000000000000000000000000000000000000000916222f3c4955626f7c8895aaabaeb3b6b8babfc0c1c3c4c6c7ccd2c8d0cac6c5c3c2bfbab8b2aca8a09e928d827a6d675d544a3f33281d140a00000000000013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d6053473a47535f6a7884919eabb7c4d0dcd2d2d2d1c5b8aca095887c6f6255483d3222140a00000013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d6053473a2d20140807060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddadfdfd3c6baada093877a6d605b6875818e9ba8b4c1cedbdfdfd4c7baada194877a6e615c6875828f9ba8b5c2cedbdfdfd3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc3b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbdfd7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7dfddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000005111d2a36414c56616c73808c929fa3abb2b9bdc4c6cad0cfd1d2d3d7dcd4d4ddd8d4d2d2d1d0cecdcccbd0cac6c5bcafa295897c6f6256493c2f2316090006131f2c3845515c677884919eabb7b9bbc0c2c5c6c9cfcdcfd0d2d3d6dbd5d6ddd7d4d2d1cdc8c4bdb9b0a8a19791847a6d605a5042382e23170b000000000c1925323f4c5865727f8b98a5b2becbd8dfdfdfdfdfeae2dcd6d3d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cbbfb2a5988c7f7265594c3f3226190c0006131f2c3845515c667986929facb8babfc3c5c7cbd0cfd0d2d3d6dbd4dcd7d4d2d1d0cfc9c6c2bdb5afa69f948e81746b60544a3f33281c0f0300000000000005111d2a36414c56616e7b86929fabb5b9bbc0c4c5c6baaea2988c7f73675d5145382e23170b000000000000000000000000000000000000000714212e3a4754616d7a8798a2aebabec2c5c6cad0ced0d1d2d4d7ddd4dbd6d3d2d0d0cac6c4bdb9b2aca49d949083796d665b50443d2f261b1106000000000013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053473c4855626f7b8896a1acb9c5d2e2dfdfddd0c3b7aa9d9084776a5f53473a2e21150200000013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053473a2d2015151312100b060706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d605b6875818e9ba8b4c1cedbe7e0d4c7baada194877a6e615c6875828f9ba8b5c2cedbe8e0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000000000713202d3946525e68717e8a929ca4aeb5bdc3c9cfd3d6dbdcddd8d4d2d1cfcfcecececed1d2d5dadad9d7dbd6d3c8bcafa295897c6f6256493c2f2316090004101c2934404b556976828f9ca9b5c2c8ccd2d1d2d4d2d2d1d0cfcfcfcfcfd0d2d4d7ddded9d4cfc9c1bab2a9a0968e81756c61544a3f34281c10030000000c1925323f4c5865727f8b98a5b2becbd8e5ececf4eae0d8d0cbc7c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5bfb2a5988c7f7265594c3f3226190c0004101c2834404b546b7885929eabb8c5cad0d2d3d6d3d2d2d1d1d1d1d2d3d7dcdfdedcdad5d2d0c7c0bbb0a69d92897d70665b5044382b1f1207000000000000010d1925303a46525e6974818d99a3afbbc7cbd1d2cabfb4aa9e9285796d60544a3f34281c10030000000000000000000000000000000000000713202d3946525e687985929facb8c5d0d2d3d6d4d2d1d1d0cfcfcfcfcfd1d2d5d9dbd6d3cec9c4bdb9aea69f958f82786c60584e41382d22170b000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347414c5666727f8c99a8b2bdc9d5e1ece0d4c7bcb1a7998c7f7266584e43372b1f120600000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d232221201f1c17171313100c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d605b6875818e9ba8b4c1cedbe7e0d4c7baada194877a6e615c6875828f9ba8b5c2cedbe8e0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000006121f2b37434e58616d7a85929ea4aebbbfc6cfd5dadfdcd7d4d2ccc8c6c4c3c2c2c2c2c2c4c5c9cfd6dee8e6e2d5c8bcafa295897c6f6256493c2f23160900000c18232f414e5a6774818d9aa7b4c0cdcbcad2ccc8c6c5c4c3c3c2c2c2c2c3c6c7ccd2d9e2e0dad5ccc4bbb2a89e938a7d70665c5044382b1f14090000000c1925323f4c5865727f8b98a5b2becbd8e5f1f8ede2d8cec6bfbab8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b2a5988c7f7265594c3f3226190c00000c18232e44515e6b7784919eaab7c4cbcac9d1cbc7c5c5c5c4c4c5c5c7cbd1d1d4d9dfe1dfd9d2ccc2b8afa59d9083786c605346392f24180c0000000000000008131e2a36424d56616e7b87929fabb5c0ccd7dbd0c5b9ada1978b7e72665c5044382b1f160b00000000000000000000000000000000000005111d2a36414c566a7784919daab7c4cccad1cbc7c5c5c4c3c3c2c2c2c3c4c5c9ced2d5dadad5cec9c0b8b0a79f948c80736a6053493f33271b0f030000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534745525d687683909ca9b6c3cedae5eaddd1c4b8ab9f95887b6e6155483c31261b0f0300000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a302f2f2e2d2b282323201f1c1812100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae0e0d3c6baada093877a6d605b6875818e9ba8b4c1cedbe0e0d4c7baada194877a6e615c6875828f9ba8b5c2cedbe0e0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000815212e3a47535f6a75818e97a1adb6bfcbd1d8e1e1d9d1cbc7c5c0bbb9b8b6b5b5b5b5b5b7b9bdc4ccd6e0ebe2d5c8bcafa295897c6f6256493c2f2316090000071925323f4c5865727f8b98a5b2bec0bfbdbcc0bbb9b8b7b6b6b6b5b5b5b7b9bbc0c7d0d2dae5ded6cdc3baafa59d9184786d6053463b30251a0e0200000c1925323f4c5865727f8b98a5b2becbd8e3ecf3e7dcd0c6bcb4aeacacacacacacacacacacacacacacacacacaca5988c7f7265594c3f3226190c0000071e2a3744515d6a7784909daab7c0bfbdbcbbbfbab9b8b8b8b7b8b9bbbfc3c4c8cdd5dde5e3ddd7cac0b8aca0958a7d7063554b4035291d1004000000000000020e1925303b46535f6974818e99a4afbbc7d4e0d5c9beb3a99e9184786d6053463d33271c10040000000000000000000000000000000000010d192530434f5c6976828f9ca9b5c0bfbebcc0bbb9b8b7b6b6b5b5b5b6b7b9bdc4c5c9cfd6ded9d5cac2b9b0a69f93877c6f655b5044372b1f160a0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474754606d7a86929facb9c5d2dfece3d7cbc0b5ab9d908376695f53463a2a20150a0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473d3c3c3c3b3a38342e302d2c28231d1c16100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cdd4d4d4d3c6baada093877a6d605b6875818e9ba8b4c1ced4d4d4d4c7baada194877a6e615c6875828f9ba8b5c2ced4d4d4d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000005111d2935414c56626f7c88939ea9b3bec8d7dce3ded6cfc7c0bbb9b6afacaba9a9a8a8a8a8abadb2bac4cfdae5e2d5c8bcafa295897c6f6256493c2f23160900000a1724303d4a5763707d8a96abb5b5b3b2b1afb6afacababaaa9a9a9a8a8aaacafb5bdc0c8d1d9e3dfd5ccc1b8aca0958a7e7164574d42362a1e120500000c1925323f4c5865727f8b98a5b2bec8d1dae8eee3d6cbbfb4aaa39f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988c7f7265594c3f3226190c0003101d2a3643505d697683909ca9b5b3b2b1afaeb4aeacabababababacaeb5b6b8bcc3cbd3dbe5e8dcd4c8bcb1a79b8f8275675d5145382c1f13060000000000000009141f2a36424d57626e7b87939facb9c1ccd7dacfc5b9aca0968a7e7164594f44382c20150a000000000000000000000000000000000000081b2834414e5b6774818e9aa7b4b4b2b1b0b5afacabaaa9a9a9a8a8a9aaacb2b7b9bdc4ccd2dbdcd4cbc2bbafa4999083786c6053463d32271b0f0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474a5464717e8a99a3afbbc7d3e0ede0d4c7bbafa3998b7f7265574d42362a180e040000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605349494949484846443f403d3a38342e2c27211c160d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0c7c7c7c7c7c6baada093877a6d605b6875818e9ba8b4c1c7c7c7c7c7c7baada194877a6e615c6875828f9ba8b5c2c7c7c7c7c7c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d83776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000713202d3946525d6874818e9aa5afbbc5cfdae7dfd6ccc4bdb5afacaca49f9e9c9c9b9b9b9b9ea1a8b2bdc9d5e1e2d5c8bcafa295897c6f6256493c2f23160900000815222e3b4855616e7b8899a3aaa8a7a5a4a3aca49f9f9e9d9c9c9c9c9c9d9fa4abaeb6bfc7d1dde7ded4c8bdb1a89c8f8376695e52463a2d20140700000c1925323f4c5865727f8b98a4aeb6bfc8d8dde4e0d3c7baaea39892929292929292929292929292929292929292928c7f7265594c3f3226190c00030f1c2936424f5c6975828f9ca8a8a7a5a4a3a2aba39f9f9e9e9e9e9fa3abaaacb1b9c1c9d3dfe9e4d9cec3b8ac9f9286796d6053473a2d20140700000000000000020e1a26313b47535f6a75828e9ba6b0bbc7d3ded5c9bdb2a89d9083776b6054483c32271b0f0300000000000000000000000000000000000d192633404c5966737f8c99a6a9a7a5a4a3aba39f9e9e9d9c9c9c9c9c9ea0a8abadb2bac1c9d2dbddd7ccc0b5ab9f958a7e7164594f43382c1c110600000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347505b6674818e9babb5c0cbd7e3ecdfd2c5b9ac9f92867a6e6154473b31261a08000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605656565656555453504a4d4a4645403938332c282119140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4babababababababaada093877a6d605b6875818e9ba8b4babababababababaada194877a6e615c6875828f9ba8b5bababababababab9ada093867a6d6053473a2d201407000c1925323f4c5865727f818181818181818181818181818181818181818181818181818181818181818181818181817f7266594c3f3326190c00000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000714212e3a4754616d7a86929facb8c1cdd7e1e1d7cdc4bab2aba39f9b9a9391908f8f8f8f8f9196a1adb9c5d2dfe2d5c8bcafa295897c6f6256493c2f23160900000713202d3a4653606d7986929f9d9b9a989796959a93929190908f8f8f8f9093999da4adb5bfcbd5dfe5d9cec3b7ab9f94877b6e6154483b2e21150700000b1825313e4b5864717e8b929ca4adb6bfccd2d9dfd2c5b8ac9f928686858585858585858585858585858585858585867f7265584c3f3225190c00020f1c2835424f5b6875828e9b9d9b9a9897969594999292929191929299989da0a7afb7c1cdd7e1eae0d3c7baaea398897d7063564a3d3023170a000000000000000009141f2b37434e58626f7c88949eaab7c2cdd8d9cec4b8aca095897d7063584e43372b1f140900000000000000000000000000000000000b1825313e4b5864717e8b979e9c9a999796959992929190908f8f8f909196989ea1a8afb7c1c9d3dfddd2c7bdb1a79d9083766b605448382e23170b00000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534753606c7985929eabb8c5d1dce8e3d7cbbfb4aa9c8f8276685e524639291f1409000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6363636363626261605c54595653514b48443d38332a251e170e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7adadadadadadadadadada093877a6d605b6875818e9ba8adadadadadadadadadada194877a6e615c6875828f9ba8adadadadadadadadadada093867a6d6053473a2d201407000b1824313e4a56626d7274747474747474747474747474747474747474747474747474747474747474747474747474726d63574b3e3225180c00000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000004101c2934404b5565727f8b98a2aebac7d3dfe6dbd0c5bbb2a8a199928e8a868483828282828284919eabb7c4d1dee2d5c8bcafa295897c6f6256493c2f231609000006121f2c3844505c6677849192908f8d8c8a89888786858483838382828284878d929ba3adb9c3cdd9e4dfd3c7bbb0a6988b7e7165584b3e2e23180c00000613202d394653606c77808d929ca4adbbc0c7d0d9d0c3b7aa9d90847b79797979797979797979797979797979797979726d62564a3e3124180b00010e1b2834414e5b6774818e92908e8d8c8a8988878686858585848586888b90959ea5afbbc5cfdbe6e3d6cbbfb4aa998c7f7366594c403326190d0000000000000000030f1a26313c47535f6a75828f9ca6b0bbc7d3dfd4c8bcb1a79c8f82766a6054473c31261a0e02000000000000000000000000000000000a1623303d495663707c8992918f8d8c8b89888786858483838282828384878b91969ea5afb7c1cdd6e1d9d0c2b8ab9f95897c6f63544a3f34281c1003000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534956626f7c8997a1adb9c6d2e3ece0d3c7baaea3988b7e7164564c41362a1e1105000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a70707070706f6f6f6e6d66696663605c55544f48443e363029201910080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa1a1a1a1a1a1a1a1a1a1a1a093877a6d605b6875818e9ba1a1a1a1a1a1a1a1a1a1a1a194877a6e615c6875828f9ba1a1a1a1a1a1a1a1a1a1a1a093867a6d6053473a2d201407000915222e3a46515b62656767676767676767676767676767676767676767676767676767676767676767676767676766635b51463b2f22160a00000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000006131f2c3845515c6776828f9caab4bfcad6e5e2d6cabeb3a9a1969187827d7a78767675757575818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f231609000003101c28343f4a5469758287858482807f7e7c7b7a797878777676767575777a808c919ba7b1bcc8d4e0e4d8cdc1b4a89b8e817568554b4034281c10040005121f2b3744505b656c74808c929ca3afb6bec7d0d1c4b8aca09590867f756d686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e22160900010d1a2734404d5a67738087858382807f7e7c7b7a7a797878787878797b7e838e939ea9b3becad6e2e7dcd0c1b5a89b8e8275685b4f4235281c0f0000000000000000000915202b37434e58636f7c89949fabb7c2cdd8d9cdc3b7ab9f94887c6f62574d42372b1e1408000000000000000000000000000000000815222e3b4855616e7b88868482817f7e7d7b7a797877767676757576777b7e848e939ea5afbbc4cfdae2d4c8bcb1a79a8e8174665c5044382b1f1206000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534c566673808c99a9b3bec9d5e2ecdfd2c5b9ac9f92867a6d6054473b3025190d01000000000013202c3946535f6c7986929facb9c5d2dfe3d6c9bdb0a3968a7d7c7c7c7c7c7c7c7b7b79787573706d67636059554f46413b322b221a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9494949494949494949494949493877a6d605b6875818e9494949494949494949494949494877a6e615c6875828f9494949494949494949494949493867a6d6053473a2d2014070006121e29343f495156585a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a595751493f352a1e120600000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000714202d3a4753606d7986929facb9c5d0dbe7dfd3c6baada29791847c75706d67696968686874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f2316090000000c17232e3b4854616e7b7a787775747271706e6d6c666b6a6969696969686e747f8c95a0acb8c4d1deeaddd0c4b7aa9d918477675c5145382c1f130600030f1b27333f49535b606e737f8c919fa4acb5bdc7cfc8bcb1a7a098928b827a706b605c5f5f5f5f5f5f5f5f5f5f5f5f585651493f34291e120600000814212e3b4754616e7a7a787775747271706f6e6d676c6b6b6b666d6e7178818e97a2adbac6d3dfe9dcd0c3b6a99d9083766a5d5043372a1d10000000000000000000030f1b26323c4854606b76828f9ca7b1bcc8d4dfd3c7bbb0a69b8e8175695f53463b3025190d010000000000000000000000000000000713202d3a4653606d787b797776747271706e6d6c656b6a6969696969696e7279818e939ea9b3bec9d5e1d8cdc2b8ab9e9285796d6053463a2d201306000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053525e687783909daab6c3cfdae6e2d6cabeb4aa9b8f8275685d524539291e140800000000000013202c3946535f6c7986929facb9c5d2dfecd7cabeb1a59a8f8a898989898989898887868482807d7975706b636159524c443d342c231a1107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a677481878787878787878787878787878787877a6d605b687581878787878787878787878787878787877a6e615c68758187878787878787878787878787878786796d6053473a2d20140700010d18232d373f464a4c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c4b463f372e23180d0200000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000a1623303d495663707c8999a3aebac7d3e2e2d6cabeb3a99f92857b6f6a63605d555c5c5c6874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f2316090000000614202d3a46525e696e6d686a68676564636260605b545d5d5c5c5c565e616d7783909daab6c3d0dde9dfd2c6b9ac9f9386796d6053463a2d20130700000b17222d384149505c636d737f8b939aa4abb5bdc6cfc3b9b1aaa29f938f847d736d665c554b5252525252525252524c4a463f372d23180d0100000714202d3946525e686e6d686a68676564636261605d555f5e545c6061666d7a85929fabb8c5d2deebded1c4b8ab9e9185786b5e5245382b1f12000000000000000000000a15202c38434f5963707d89959fabb8c3ced9d8ccc2b9ac9f93877b6e61564c41362a1d130700000000000000000000000000000006121f2b3844505c666d6e6d6669676664636260605b5e5d5d5c5c5c565e61676d77818e97a1adb9c6d2dfdfd2c6b9ada197897c706356493d2d22170b000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605354616e7a87939facb9c6d2dfecdfd3c6baaea2988a7d7164564c413529170d0200000000000013202c3946535f6c7986929facb9c5d2dfecdacec2b6aba19a9696969696969695959992918f8c8985817d77706b615e564f473e352c23190f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a776c6054606d7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786c6054606d7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786c605346392d201306000006111b252d343a3e3f414141414141414141414141414141414141414141414141414141414141414141414141413f3e3b352e251c12070000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000c1926333f4c5966727f8c99abb4bfcbd7e3dfd3c6baada2978b7f7269605854514c4f515b6874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f23160900000005121e2a36424d575e61615e565c5a595756555453504a5050504f4f4c525b66727f8c99a5b2bfccd8e5e0d4c8bbafa49a887b6e6155483b2e221508000006111b262f383f44525b636d727f889399a3abb5bdc6cbc3bcb4aea59e96918780786d675d554c44464646464646463f3e3a342d251b110600000005111e2a36414c565e61615e565b5a595756555453514b52524a5053545d6775828e9ba8b5c1cedbe8ded2c5b8ab9f9285786c5f5245392c1f1200000000000000000000040f1b27323d4854606b7683909da7b1bcc8d4e0d4c7bbafa4998d8174685e52463a2f24180d00000000000000000000000000000003101c28343f4a545c6061605c545a595856555453504950504f4f4f4d52555c656d7a85919eabb8c4cfdae2d5c9beb3a9998c7f736653493f33271b0f030013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60545464717e8b9aa4afbbc8d4e0ebded2c5b8ab9f9285796d6053473a2f2419070000000000000013202c3946535f6c7986929facb9c5d2dfecded3c8bdb3aba5a3a3a3a3a3a3a2a2aba39f9e9c9998928e89837d756e68605950473e352b21170b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c655b525d686d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c665b525d686d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c655b5044372b1f120500000009131b23292e31323434343434343434343434343434343434343434343434343434343434343434343434343433322f2a231c130a000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000030f1c28333f4a546875828e9ba8b5c1d1dce7ded2c5b8ab9f9285796d60574e474546515b626874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f231609000000020e1a25303b454d525454524c4f4d4c4b49484746443f4443434342414a5663707d8996a3b0bcc9d6e3e4d8ccc0b6ac96897c6f6356493c302316090000000a141d262d334049525b636d727e879299a3abb4bcc6cec6bfbaafa8a199938d81796d675d564c443a323939393932312e29231b130900000000020e1925303b444c525454524c4f4d4c4b49484747454045453f44464c556774818d9aa7b4c0cddae7dfd2c5b9ac9f9286796c5f5346392c201300000000000000000000000a16212c38444f5964707d8a95a0acb8c3ced9d7ccc0b5ab9f92867a6e61554b4135291d12070000000000000000000000000000000b17232e38424a50535553514a4e4c4b4a4847494b4e50514a5053504a4b535d6873808c99a9b3becad6e2dacfc2b5a99c8f8276655b5044372b1f12050013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6261606675828e9bacb6c0ccd8e4e2d5c9beb3a99b8e8174675c514538281e13080000000000000013202c3946535f6c7986929facb9c5d2dfece4d9cfc5bdb6b1b0afafafafafafafb5afacaba8aaa29f9b95908a827a6f6b615a50473d33291d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c555d6061616161616161616161616161616161605b534c565d6061616161616161616161616161616161605b544c565d6061616161616161616161616161616161605b53493f33271b0f03000000010911181e222425272727272727272727272727272727272727272727272727272727272727272727272727272625221e18120a01000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000006121f2b3844505b667784909daab7c3d0dde7dacec1b4a79b8e8174675c51453d3e4a57626d7274818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f2316090000000009141f29333b42464847464142413f3e3d3b3a3938332d363636303c4956626f7c8995a2afbcc8d5e2e8ddd2bdb0a3968a7d7063574a3d3024170a000000020b141b2227374049515b626c717e879299a3aab4bdc6cfcac1bab2aba49f938f82796d685d564c443a31282c2c2524221e18110901000000000008141e29323b414647474641454747474747474747474747474747505c6675828f9ba8b5c2cedbe8dfd2c6b9ac9f9386796c605346392d2013000000000000000000000004101c27333d4653606c7883909da8b2bdc8d4ddd2c7baaea3988d8073675d5145392e23180c00000000000000000000000000000006111c2630383f44464846444041434749505355585b5d5e5f5c605c54595656616e7b8897a1adb9c6d2dfded2c5b8ab9f9285796c605346392d2013060013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a716f6e6c6d7985929fabb8c5d2dde8dfd2c6b9ada197897d7063554b4034291c10040000000000000013202c3946535f6c7986929facb9c5d2dfecebe1d7cfc8c2bebdbcbcbcbcbcbcbcc0bbb9b7b5b4aeaca7a09d948f857d706c61594f453b2f261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a434c515454545454545454545454545454545454535049434c52545454545454545454545454545454545453504a444c52545454545454545454545454545454545453504941382d22170b000000000000060d121518191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b191816120d070000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000613202d394653606c7985929facb8c5d2dfe4d7cbbeb1a4988b7e7165554b40333f4c5965727f7f83909daab6c3d0dde2d5c8bcafa295897c6f6256493c2f23160900000000020d17212930363a3b3a39353337393c3f4244434141404041414242495663707c8996a3afbcc9d6e2e3d6cabdb0a3978a7d7064574a3d3124170a00000000020a1117252e373f49515a626c717e879298a3abb5bdc7d0ccc4bdb5afa59e948f837a6d685d564c433a31271d141816120d0600000000000000020d1720293036393b3a434b5153535353535353535353535354545a606d7985929eabb8c5d1deebdfd2c5b8ac9f9285796c5f5246392c1f130000000000000000000000000b161f2b3744505b65717e8a96a0acb8c4cfdad6cbbfb4aa9f92857a6d60544b4034281b11060000000000000000000000000000000a141e262e34383a3b3a3d44484e54535b60626567696b6c666d66696662605f697885929eabb8c5d1dedfd3c6baaea298877b6e6154483b2e2115080013202c3946535f6c7986929facb9c5d2dfe5d8cbbfb2a5988c7f7d7c7a79787d8998a2aebac6d3e4ebded1c5b8ab9e9285796d6053463a2f23180c000000000000000013202c3946535f6c7986929facb9c5d2dfecf8e9e1d9d3cecac9c9c9c9c9c9c9d1cbc7c5c4c2bfbab8b1aca69e9792867e706b60574d42382d22170b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313a4145474747474747474747474747474747474746443f3a4145474747474747474747474747474747474746443f3a4145474747474747474747474747474747474746443f382f261b1106000000000000000106090b0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0c0a0602000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000815212e3b4854616e7b8798a3aebac7d3e0e3d7cbc0b5ab95897c6f6256493c2e46525f6c79868c9095a0abb8c4d1dde2d5c8bcafa295897c6f6256493c2f2316090000000000050f171f252a2d3337393c3f4446484b4f50504e4d4d4d4d4e4e4f4e5865717e8b98a4b1becbd7e4e3d7cabdb0a4978a7d7164574a3e3124170b00000000000006131c252d373f48505a616c717d869299a3abb5bec7d2d0c7c0bbafa69f9590837a6d685d554b43392f261b11060601000000000000000000050e171e252a2d35404b555d6060606060606060606060606061646c727f8c97a1adb9c6d2dfebded1c4b8ab9e9185786b5e5245382b1f12000000000000000000000000030f1b27333f4953606d7884919ea8b2bdc9d5dcd0c6baada2978c7f72665c5145382d22170b000000000000000000000000000000020c141c23282b323a41464f54586062656c6f727476777979797876736f6c656976838f9ca9b6c2cfdce2d6cabeb4aa96897d7063564a3d3023170a0013202c3946535f6c7986929facb9c5d2dfecd9cdc0b4a79c918c8a8987868484919eaab3becad6e2e1d5c9bdb2a89a8d8074665c5044382c1d1207000000000000000013202c3946535f6c7986929facb9c5d2dfecf8f3ebe4dedad7d6d6d6d6d6d6d5dcd7d4d2d1d0cac6c3bcb8b0a9a19892867d70695e544a3f33281d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3937332f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3938332f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3937332d261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000916232f3c4956626f7c8995aab4bfcbd6e3e0d3c7bbafa399877a6d6154473a3946525f6c7985929da0a7b1bcc8d4e0e2d5c8bcafa295897c6f6256493c2f23160900000000000b151e272e34383f44464849505355585b5d5c5b5a5a5a5a5b5b5c58606a75818e9ba8b5c1cedbe8e3d6c9bdb0a3968a7d7063574a3d3024170a000000000000000a131c252d363f48505a616b707d879299a3acb6c0ccd8d2ccc1b8b0a79f9590837a6d675d554b41382d22170e050000000000000000000000050d14191f2c3845515d676d6d6d6d6d6d6d6d6d6d6d6d6d6e70767e87929fa9b3bec9d5e2e7ddd0c3b6aa9d9083776a5d5044372a1d11000000000000000000000000000b17222d3844505c66717e8b96a1adb9c4cfdad6cabeb3a99e9184796d6053493f33271b0f03000000000000000000000000000000061019232b343d444c525960636a6f74787c7e81838485868685837f7c78747175828e9ba8b5c1cedbe7dbd0beb2a5988b7f7265584c3f3225190c0013202c3946535f6c7986929facb9c5d2dfecdcd0c4b8ada39c9897959992919196a1adbcc5d0dbe6ded2c5b9aca196897c6f63544a3f34281c0b01000000000000000013202c3946535f6c7986929facb9c5d2dfecf8eae2dad4cfcbcacacacacacacacbced2d3d6dbd6d3cdc8c1bbb3aaa39892857b6e665b5044392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e24292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b2724292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b2824292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b27221b140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000b1724313e4a5764717d8a97a4b0bdd0dce7dfd2c5b9ac9f928679685e5246393946525f6c7985929facb1b9c3cdd9e4e2d5c8bcafa295897c6f6256493c2f2316090000000007121d273039404549505355535b606265686a696867666667686868696a6f7c87929facb9c5d2dfece3d7cbbfb4aa96897c6f6356493c3023160900000000000000010a131b242d363e485059616b717e87929aa4afbbbfc8d2d7cac2b9b1a7a0959083796d675c53493f332720170d020000000000000000000000020814202d3a4753606d797a7a7a7a7a7a7a7a7a7a7a7a7b7d828b9299a3afbbc5cfdae6ddd6cabeb3a99b8e8174685b4e4135281b0e0000000000000000000000000006111b28343f4a54606d7984919ea9b3bec9d5dbd0c5b9ada1968b7e71655b5044372b1f160a0000000000000000000000000000040d18222b353d464e565e616b70767c8185888b8e9091929298928f8c8985817d7a818e9ba7b4c1cedae6d9ccc0b3a6998d8073665a4d4033271a0d0013202c3946535f6c7986929facb9c5d2dfece0d5c9bfb5ada7a5a4aba39f9e9ea1a8b2bdced7e1eaded1c4b7ab9e9184786c605346392e23170c00000000000000000013202c3946535f6c7986929facb9c5d2dfecece2d8d0c8c3bfbebdbdbdbdbdbebfc2c5c7cad0d8dfd9d4cdc5bcb4aaa2979082786c60554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d202121212121212121212121212121212121201f1b191d202121212121212121212121212121212121201f1c191d202121212121212121212121212121212121201f1b17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090e070f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000c1825323f4b5865727e8b98a5b1becbd8e4ded1c5b8ab9e9285786b564c41363946525f6c7985929facb8c3cbd5dfeae2d5c8bcafa295897c6f6256493c2f231609000000000c18232e39434b51535b606265656c6f72757776747473737474757575777c849199a3aebbc7d3e0ece0d3c7baaea398877b6e6154483b2e21150800000000000000000109121b242c363e474f59616c717e88939fa3adb6c0c9d3d4cbc2b9b1a79f959082796d655b50443e32291e1408000000000000000000000004111e2a3744515d6a7783868686868686868686868687878a8f949fa3abb5c0cdd7e1ddd8cbc3baada2978b7e7164584b3e3125180b00000000000000000000000000000b17232e3844515c66727f8b97a1adb9c5cfdbd5c9bdb2a89d9184786c6053463d32271b0f03000000000000000000000000010c161f2a343d474f5860686d757d83898d9297989a9c9e9f9fa29f9c9997918e8a8685929fabb8c5d2dee7dacec1b4a79b8e8174685b4e4135281b0e0013202c3946535f6c7986929facb9c5d2dfece6dbd1c7bfb8b4b2b0b5afacababadb2bac4cfe0e9e0d4c8bcb1a7998d8073655b5044372b1c110600000000000000000013202c3946535f6c7986929facb9c5d2dfece5dad0c6beb7b2b1b1b1b1b1b1b1b2b5b8babfc6ced3dcdfd6cec6bcb3a99f948b7e71675c5145382c1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d1113141414141414141414141414141414141413120f0d1113141414141414141414141414141414141413120f0d1113141414141414141414141414141414141413120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315161b14131c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000d192633404c5966737f8c99a6b2bfccd9e5ddd1c4b7aa9e9184776b5e5144303946525f6c7985929facb8c5d2dfe6f1e2d5c8bcafa295897c6f6256493c2f23160900000004101c2834404b555c60656c6f7275797b7e82838381808080808181828284889196a1abb5bfcbd7e3ecdfd2c5b9ac9f9286796d6053463a2d2013070000000000000000000009121b242c353e47505a616c727f8b919ca4aeb7c1cad4d4cbc3b9b1a79f948e81776c60594f443b3025190d040000000000000000000004111e2a3744515d6a778490939393939393939393939394979c9fa6afb5bdc7d1dfd9d2ccc2b9b1a79f9285796d6053473a2d201407000000000000000000000000000006111c2834404a54606d7985919ea9b3becad6dacfc4b8aca0958a7d7064594f44382c20150a00000000000000000000000008131e28313c464f59606a6f7a818990959a9ea1a9a7a9aaacacaeaba9a9a19e9b99929297a2adbac6d3dfe8dbcfc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfecede3d9d1c9c4c0bfbdc0bbb9b7b7b9bdc4ccd6e0eaded1c5b8aca095887c6f6253493f33271b0f0300000000000000000013202c3946535f6c7986929facb9c5d2dfecdfd4c8beb4aca6a4a4a4a4a4a4a4a5a8acaeb4bcc2cad3dce0d8cfc5bbb0a69e9184796d6053473b31251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607080808080808080808080808080808080605030104060708080808080808080808080808080808060603010407070808080808080808080808080808080806050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151b1f21222821201d2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000d1a2734404d5a6773808d9aa6b3c0cdd9e6ddd0c3b7aa9d9084776a5d5144373946525f6c7985929facb8c5d2dfe4e4e2d5c8bcafa295897c6f6256493c2f23160900000006131f2c3845515c676d75797c7f8285888b8e908f8e8d8d8d8d8e8e8f8f90959ea1a8b2bdc6d1dce7ebddd0c3b6aa9d908377665c5044382c1f1206000000000000000000000009121a232c353e48505a626d727f8c929da5afb8c2ccd5d5cbc2b9b0a69e938d80736b61564c41362a21160b0000000000000000000004111e2a3744515d6a7784909da0a0a0a0a0a0a0a0a0a0a1a3a9aab0bbc0c7cfd9d9d0c7c0bbb0a79f958c8073675d5145392c2013060000000000000000000000000000000c18232e3945515d67727f8c97a2adbac5d0dbd4c8bdb1a89d9083766b6054483c31261b0f0300000000000000000000010d19242f3a434e58606b707c848e939d9fa7abadb3b4b6b7b8b9bab8b6b3adababa39f9fa2a9b3becad6e2e9dcd0c3b6a99d9083766a5d5043372a1d100013202c3946535f6c7986929facb9c5d2dfecf8ebe3dbd5d0cdcbd1cbc7c5c4c4c5c9cfd6dee8eaddd0c3b7aa9d9084776a5f5341382d22170b0000000000000000000013202c3946535f6c7986929facb9c5d2dfecdbcfc3b7aca29b97979797979797989b9fa2aab0b8c2cad4e1e1d7cdc2b9ada1968b7e7164574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101820262b2e2f342e2d292535424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7ddd0c3b6aa9d9083776a5d5044373946525f6c7985929facb8c5d2d7d7d7d7d5c8bcafa295897c6f6256493c2f2316090000000713202d3a4653606d798185888b8f9297989b9d9c9b9a99999a9b9b9b9c9da0a7acb2bac4cfd8e3ebe2d5c9bdb2a89a8d807467544a3f34281c100300000000000000000000000008111a232c363e48515b636d73808d939ea6b0bac3ced7d4cbc2b8afa59f93887d70685e52463d32271b0f0400000000000000000004111e2a3744515d6a7784909daaadadadadadadadadadadb0b5b7bbc2cbd1d9ddd2c7beb6afa69f959083786d60554b4035291d100400000000000000000000000000000007121c2935404b55606d7a85929faab4bfcad6d9cec3b7ab9f95897c6f63584e43372b1f14090000000000000000000004111d2935414c565f6a707d8691969ea5abb1b8b9bec1c3c4c5c5c6c5c2beb9b8b5afacabadb3bbc5d0dbe6e9ddd0c3b6aa9d9083776a5d5044372a1d110013202c3946535f6c7986929facb9c5d2dfecf8f5ede6e0dcd9d8dcd7d3d2d1d1d2d5dae0e8eee2d6cabeb3a9998c7f7366584e432f261b11060000000000000000000013202c3946535f6c7986929facb9c5d2dfecd8cbbfb2a69b908b8a8a8a8a8a8b8c8f92989ea6b0b8c2cfd8e2dfd5c9bdb2a89d908376695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607080809090a09090806050300000000000000000000000000000000000000000000000000000000000003090d1012131313131313131313131313131313131313131313131313131313131313131313131313131313130f0f0d090400000000000000000000000000000000000000000000000000000000000000020b18222a32373b3c413a39353035424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7ddd0c3b6aa9d9083776a5d5044373946525f6c7985929facb8c5cbcbcbcbcbcbc8bcafa295897c6f6256493c2f2316090000000713202d3a4653606d79869297989b9ea1a9a8aaa9a7a7a6a6a7a7a8a8a8aaacb1b9bdc4ccd6e1eae4d9d0c7b9ada196897d706356493d2e23170c000000000000000000000000000008111a242c363f49515b606c77818e949fa8b1bcc5d0dbd4cac1bbafa49a92857a6e61594f44382c20150a00000000000000000004111e2a3744515d6a7784909daab7b9b9b9b9b9b9b9bababdc2c3c7ccd7dce3d8ccc0b6aca49f948f837a6d665c5043392f24180d01000000000000000000000000000000000c18242f3945515d6773808c98a2aebac6d0dcd3c7bcb1a79c8f82756a5f53473b31251a0e020000000000000000000613202c3945525d686f7c869298a1a8afb7bcc2c6c9cfcfd1d2d2d3d2cfc9c6c4c0bbb9b8babec5cdd7e1eceaddd0c3b7aa9d9084776a5d5144372a1e110013202c3946535f6c7986929facb9c5d2dfecf8ebe3dbd5d0cdcbcdced0d1d2d5dae1dee4ebecdfd3c6baada297887b6e6155483c3122140a000000000000000000000013202c3946535f6c7986929facb9c5d2dfe4d7cabeb1a4978b7e7e7e7e7e7e7e7f82868f949ea6b0bcc6d1dce5dacfc4b8ab9f95877b6e6154483b2e211507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030606080b060c101213141516161616151413120f0b06070502000000000000000000000000000000000000000000000000070e14191d1f202020202020202020202020202020202020202020202020202020202020202020202020202020201c1b191510090200000000000000000000000000000000000000000000000000000000000a141d2a343c4347494e4746413a32424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1b2835424e5b6875818e9ba8b4c1cedbe7ddd0c3b6aa9d9083776a5d5044373946525f6c7985929facb8bebebebebebebebebcafa295897c6f6256493c2f23160900000006121f2b3844505c667985929fa9a8abadb3b5b6b6b4b3b3b3b3b4b4b5b5b7b8bcc3c9ced6dee8e2dcd2c7beb2a89e9184796d6053463a2d20130600000000000000000000000000000008121b242d373f44505b656d78828f95a0aab3becad6dcd8ccc0b6aca2978e81756b6054483c32261b0f03000000000000000004111e2a3744515d6a7784909daab7c3c6c6c6c6c6c6c6c7cacfd0d3d8dee8e0d4c8bbafa49a938d827a6d685e544a3f31281d1207000000000000000000000000000000000007121d2935414b55616d7a85929faab4bfcbd6d8cdc2b9ac9f93877c6f62574d42362a1e1308000000000000000006121e2b37424e57606d7a849198a2aab2bac1c7cdd2d5dadcdddcd7d3d2d2d2d2d1cbc7c5c5c6cad0d7dfe9f3eaddd1c4b7aa9e9184776b5e5144382b1e110013202c3946535f6c7986929facb9c5d2dfecede3d9d1c9c4c0bfc0c1c3c5c6c9cfced3d9e1ebded2c5b8ab9f9285796c605346392e23180c000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a71717171717172757b828f949faab4bfcbd7e3e0d4c8bcb1a7988b7e7265584b3f2f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507060b0f121315171a171c1f202122222323232221201f1b171514120e09040100000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000000006111c262f3c464e53555b54524c443e424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8ddd0c3b7aa9d9084776a5d5144373946525f6c7985929facb1b1b1b1b1b1b1b1b1b1afa295897c6f6256493c2f23160900000003101c28343f4a5f6b7885929eabb5b8b9bec1c3c2c1c0c0c0c0c1c1c2c2c3c5c8ced5dae0e2dfd8d0cbc0b6aca1968c7f72665c5044382b1f12060000000000000000000000000000000009121b2527333f49535c666d7a839198a2aebac1ced7ddd2c7beb3a99e93897d6f63584e43372b1f1306000000000000000004111e2a3744515d6a7784909daab7c3d0d3d3d3d3d3d3d4d6dcdcdfe3e9ecdfd2c6b9ac9f938880786d685e564c42382e1f160c010000000000000000000000000000000000010d18242f3a46525d6873808d98a3aebac6d1dcd4c8bbafa49a8e8174695e53463a3024190d01000000000000000814212e3a47535f6a74808d96a0aab4bcc4ccd3d8dfdfd9d4d1d1cbc7c5c5c5c7cbd1ced1d2d3d6dbe1e9f2f7eaddd1c4b7aa9e9184776b5e5144382b1e110013202c3946535f6c7986929facb9c5d2dfece6dbd1c7bfb8b4b2b3b5b6b8b9bec5c2c8cfd8e1dfd3c6baada297897c7063544b4034281c10040000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d646464646465696e78828f98a3aebac7d3e0e4d8cdc1b5a89b8e817568554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506080d111314171c1f2022242623282c2d2e2f2f30302f2f2e2d2b272221201e1a14110d0701000000000000000000000000000000000007111a232a313538393939393939393939393939393939393939393939393939393939393939393939393939393939393635312c261e150c0200000000000000000000000000000000000000000000000000000b17222d38424e585f6267615e565047424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8ddd0c4b7aa9d9184776a5e5144373946525f6c7985929fa4a4a4a4a4a4a4a4a4a4a4a4a295897c6f6256493c2f231609000000000b17232e44515e6b7784919eaab7c4c6c9cfd0cfcecdcccccdcecececfd0d1d4d9dfdddbd6d3cec6bfbaafa49a9184796d60544a3f34281c10030000000000000000000000000000000000091217222d38414a545d686e7b86929fa5afbcc5d0dbd9d0c5bbafa59c9083766a5f53473b2e211509000000000000000004111e2a3744515d6a7784909daab7c3c7c7c7c7c7c7c7cacfd0d3d8dee6e8dccfc2b5a99c8f82796d665d564c443a30261c0d040000000000000000000000000000000000000007131d2935414c56616e7a86929fabb5bfcbd7d8ccc0b6ac9f92867b6e61564c4135291d120700000000000004101d2935404b55626e7b87929fa8b2bcc6ced6dfe4ddd5cdc8c4c3bfbab9b8b9babfbec1c5c6cacfd7dfe4ecf7eaddd0c4b7aa9d9184776a5e5144372b1e110013202c3946535f6c7986929facb9c5d2dfece0d5c9bfb5ada7a5a6a8aaabadb3b2b6bdc6cfdfe2d6cabeb3a99a8e8174665c5145382c1f13070000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6057575758575e666e7b86929facb9c5d2dfeaddd1c4b7aa9e918477675d5145392c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121315191d202122282b2d2f31332e34383a3b3b3c3c3d3c3c3b3937332d2e2d2a25201d18130c07010000000000000000000000000000030e19232c353c41454646464646464646464646464646464646464646464646464646464646464646464646464646464642413d3730271e140900000000000000000000000000000000000000000000000000030f1c28333f4a545f6a6f746d68625a534d4f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8ded1c4b7ab9e9184786b5e51452f3946525f6c798592989898989898989898989898989895897c6f6256493c2f23160900000000061e2a3744515d6a7784909daab7c3d0d5dad6d1cecdc9ccced0d2d3d6dbdbd6d3d2d0d0cac6c1bcb4aea49f93887d70675d5142382e23170b0000000000000000000000000000000000000006111b262f39424c565f69717e8a939eaab3becad6e2d7cdc1b7ab9f94887c6f6255493c31261a0e020000000000000004111e2a3744515d6a7784909daab7babababababababbbdc3c4c7cdd4dde4ddd0c3b7ab9f948d80746d63594f433a2f24190d0000000000000000000000000000000000000000010d1924303a46525e6874808d99a3aebbc7d2ddd2c7bbafa3998d8074685d5246392f24180c0000000000000613202c3945515d6774818e99a3afbac4ced7e0e5dbd3cbc3bcb8b6b4aeacabacaeb4b1b4b8b9bec5cdd2dae4eeeaddd0c3b7aa9d9084776a5d5144372a1e110013202c3946535f6c7986929facb9c5d2dfecdcd0c4b8ada39c989a9b9d9ea1a9a6abb4bdcdd7e1dbcfc5b8ab9f9285796d6053463a2f24180d0100000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534b4b4b4d545f6975818e9ba8b5c1cedbe8dfd2c6b9ac9f93867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f202225292d2e2d3338393b3e40423f4446474849494949484746443f3e3b3a36302c29241d18120b030000000000000000000000000009141f2a353e474d51535353535353535353535353535353535353535353535353535353535353535353535353535353534f4d49423930261b10040000000000000000000000000000000000000000000000030c19232b3844505b666f7c817a716c625f57515c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1b2835424e5b6875818e9ba8b4c1cedbe7ded1c5b8ab9e9285786b554b40353946525f6c79868b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b897c6f6256493c2f23160900000003101d2a3643505d697683909ca9b6c3cfdcd2cbc5c2c0bdbfc1c3c5c6cad0d0cac6c5c4c2bebab8b0aaa39f928c80736b61554b4030261c110600000000000000000000000000000000000000000a141d27303a444d57616c74818e98a2aebac6d3dfdfd3c7bbb0a69a8d807467574d42372b1e12060000000000000004111e2a3744515d6a7784909daaadadadadadadadadaeb0b6b7bcc2cbd2dadfd3c7bbb0a69d928c7f726b60554c4135291d1207000000000000000000000000000000000000000008131e2a36414c56616e7b86929fabb5c0ccd7d7cbc0b5ab9f92867a6d61554b4035291c110600000000000714202d3a4753606d7a86929fabb5c0ccd6e0e8dfd3c9c1b9b1acaaaaa39f9f9fa3aaa4a8abadb3bbc0c8d2dce7e9dcd0c3b6a99d9083766a5d5043372a1d100013202c3946535f6c7986929facb9c5d2dfecd9cdc0b4a79c918c8d8e909297979aa2abbbc5d0dbdfd3c6baada2978a7d7064554b4135291d110400000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473e3e424d5764717e8a97a4b1bdd0dbe7e0d4c8bbafa49a887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b22272b2d2f3035393a3d3f4446484a4d4f4a505354555556565655545350494b4846423b39352f29241d150d070000000000000000000000000d1925313c4750585e5f6060606060606060606060606060606060606060606060606060606060606060606060606060605c5a544c42372c21150900000000000000000000000000000000000000000000000b151e2a36414c56606c78838e857e766e69605c556875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7dfd2c5b8ac9f928579675d514538313e4b5864717e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7a6d6154473a2e21140700000003101c2936434f5c6976828f9ca9b5c2cfd2c9c0bab5b4b0b3b5b7b8babfbbbbbfbab8b7b5b3adaba69e98928b80746e63594f43392f1e140a000000000000000000000000000000000000000000020b151e28323c45505a616d7a85929fabb8c5d0dbe4d8cdc2b7ab9e918478695f53473a2d2114080000000000000004111e2a3744515d6a7784909da1a1a1a1a1a1a1a1a1a1a3a9abb0b8c0c8d2dcd8ccc2b8aea49f93887d70675d5145392e23180c0000000000000000000000000000000000000000020d1925303b46535e6974818e99a4afbbc7d2dcd1c7baaea2988c7f73675d5145382e23170b00000000000b1724313e4a5764717d8a98a2aebdc7d1dee7e1d6cdc1b7afa7a09d97989292929895989b9ea2a9aeb6c0cbd6e1e8dccfc2b5a99c8f8276695c4f4336291c100013202c3946535f6c7986929facb9c5d2dfe5d8cbbfb2a5988c7f80828385868a909aa9b3becad6e2d6cabeb3a99b8e8175675d5145392c20130800000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a303b4855626e7b8895aab4bfcad6e2e4d8ccc0b6ac96897d706356493d3023160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3337393b3e4146474a4a50535557595b545c606162626363626261605b535854524d4745413a352f271f18120b0300000000000000000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69655e54493d3125190d0000000000000000000000000000000000000000000007121d27303946525e68727f8b95928b827b736d67606875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000001020202020b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050202020200000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c7baaea298867a6d6053473a2d3d4956626c7171717171717171717171717171717171716d685e5246392d201307000000020f1c2835424f5b6875828e9ba8b5c1cecbc0b7aea9a7a3a6a8aaacaeb4aeaeb4aeacaaa8a9a29f9a948f867f746e645c52473e31271d0c020000000000000000000000030608090c0b0a09080605030c16202a333e46525e6873808d9aaab4becad6e2ded2c5b9aca196887b6e6155483b2e2215080000000000000004111e2a3744515d6a7784909494949494949494949494979c9fa6aeb6c0cad4ded4cac0bbafa49a91847a6d60554b4034281c1004000000000000000000000000000000000000000008141e2a36424d57626e7b87939facb6c0ccd8d6cabfb4aa9e9285796d60544a3f34281c100300000003101c28343f4a546774818e9aaab4bfcfd9e3e6dacfc4bbafa59e95908a8786858687888b8e92979da4aeb9c5d1dde7dbcec1b4a89b8e8175685b4e4235281b0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a737577787a7e8a97a2adbac6d3dfdbcfc5b8ac9f92867a6d6054473a3025190d01000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d3a4653606d798698a2aebac6d3dfe8ddd2bdb0a3978a7e7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f4446484b4c525457545b60626466686a666d6e6e6f6f706f6f6e6c656864615e5754514b4540393128231c150c03000000000000000000121f2b3845515e6a74797979797979797979797979797979797979797979797979797979797979797979797979797979797570655a4d4135281b0f000000000000000000000000000000000000000000000c18232e39434f59616e7a85929f9e948f868079706b6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b00000000000002070b0d0d0f0f0f0f0f1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110f0f0f0f0f08070502000000000000000d1a2734404d5a6773808d9aa6b3c0cdd9e6e2d6cabfb4aa94877b6e6154483b2e3945505a62646565656565656565656565656565656565615e564c41362a1d1105000000020e1b2835414e5b6874818e9ba7b4c1cec5baaea49d9a96999b9d9fa2aaa1a1aaa29f9d9b9997928e88827b726d645c524a40352c1f150b00000000000000000000040a0f131516181817161413120f0b0d18212a36414c56636f7c8998a2aebac6d3dfe1d5c9bdb2a8978a7e7164574b3e3124180b0000000000000004111e2a3744515d6a77838787878787878787878787888a90949da4aeb8c2cdd8dcd8ccc0b6aca1968c8073675c5145382c1f13060000000000000000000000000404040404040404020e1a25313b47535f6975818e9aa4afbbc8d4dbd0c6b9ada1978b7f72665c5044382b1f160b00000006121f2b3844505c667784909daab7c3d0ddebe1d5c9beb3a99e938e837e7a7978797a7c7e81858d929da9b5c1cedbe6dacdc0b3a79a8d8074675a4d4134271a0e0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d686a676d7985929fabb8c5d2dee0d3c7baaea2988b7e7164564c41362a1e1105000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d3844505c667985929facb8c5d2dfe4d7cabdb1a4978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414950535558565e616467666c6e7173757678797a7b7c7c7c7c7b7a797774716e6965605d55514b433e342e271e150c03000000000000000013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686868686868686868686868275695c4f4236291c0f00000000000000000000000000000000000000000004101c2834404b55606b75818e97a2a69f98928c847d746d75828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000080e1317191a1c1c1c1c1c1c24313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1c1c1c1c1c1c1514120e090200000000000d192633404c5966737f8c99a6b2bfccd9e5e7dbd0bcafa295897c6f6256493c2f343e48505658585858585858585858585858585858585854524c443a3025190d01000000010e1a2734414d5a6774808d9aa7b3c0cdc2b5a99d928d8a8c8e909298949494949892918f8c8985817c756e69625b524a40372e231a0d03000000000000000000070e151b1f22222525242221201f1b171c1c1925303a4653606d7985929fabb8c5d2dee5dacec0b3a6998d8073665a4d4033271a0d00000000000000000714212e3a4754616d7a7a7a7a7a7a7a7a7a7a7a7a7b7d838d929da6b0bcc7d3dfddd2c7beb2a89f9285796d6053463a2d20130700000000000000000306080911111111111111111109141f2b37424d57626f7c87939facb9c2ccd8d5c9beb3a99e9184786d6053463d33271c100400000713202d3a4653606d7986929facb9c5d2dfecdfd2c6b9ada1978e8178716e686c686d6f717578808d9aa7b3c0cddae5d9ccbfb2a6998c7f7366594c403326190d0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60555d6675828f9ba8b5c2cedae2d6cabfb4aa9c8f8276685e5246392d201409000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d34404b546b7885929eabb8c5d1dee4d7cabeb1a4978b7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f49535b60626467686d707376797b7d808283858687888889898988878583817e7b76716d67605d554f44403930271e150c030000000000000013202c3946535f6c798692939393939393939393939393939393939393939393939393939393939393939393939393938f8275695c4f4236291c0f0000000000000000000000000000000000000000040d1a242c3845515c67707d89939ea9b0aaa39f969189817a75828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b000000020a12191f23262728282828282828313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b2828282828282821201e1a140d05000000000c1825323f4b5865727e8b98a5b1becbd8e4e4d7cabdb1a4978a7e7164574b3e302d363e45494b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4746413a32291e130800000000000d1a2733404d5a6673808d99a6b3c0ccc0b4a79a8d807d808284858687888887868584827f7c79746f6a615f57514940382f251c110800000000000000000007101920272b2e2f3231302f2e2d2b2722292928282b3844505c667784919daab7c4d0dde7dacec1b4a79b8e8174685b4e4135281b0e02000000000000020813202d3946525e686d6e6e6e6e6e6e6e6e6e6e6e6e7078808d949fabb7c3cdd9e4d9d0c4baada2978a7d7063574a3d30241706000000000000040a0f1315161e1e1e1e1e1e1e1e1e1e1e1a26313c47535f6a75828f9ca6b0bbc7d3dacfc5b9aca0968a7e7164594f44382c20150a00000815212e3b4854616e7b8799a3afbbc7d3e0ebded1c4b8ab9e9185796d66615e565d6062656673808d9aa6b3c0cdd9e4d7cabdb1a4978a7e7164574b3e3124180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60535465727e8b98a8b2bdc9d5e1dbd0c5b9ac9f92867a6d6154473b31261a0e020000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d3845515c667985929facb8c5d2dfe4d7cabdb1a4978a7e7164574b3e3124180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b656c6e7174777a7d808385888a8c8e909192999595969695959892908e8b87837e7a736d676159514a423930271e150a0000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c8f8275695c4f4236291c0f00000000000000000000000000000000000000010c161f2b37424d57606d7984919da5afbbb4aea8a09d938e857e818f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000a141c242a2f333435353535353535353e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e51443835353535353535352e2d2a251f170f050000000a1724313d4a5764707d8a97a3b0bdd0dbe6e6d9ccbfb3a6998c807366564c41362a2d34393d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3a3936302920170c0200000000000c1926333f4c5966727f8c99a5b2bfccc2b5a89b8f8275737577797a7a7b7b7a7a797775736f6d66625f58534d453f372f261d1710080000000000000000040e19222b32373b3c3f3e3d3c3b3937332d3635353434343f4a54697683909ca9b6c3cfdce9dccfc2b6a99c8f8376695c504336291d10030000000000050c13191d2935414c565e61616161616161616161616161666c7882909ca7b1bcc8d4e0e2d6cabeb3a99a8d8073675a4d402d22170b0000000000060e151b1f21222a2a2a2a2a2a2a2a2a2a2a2a2a2b37434e58626f7c89949fabb7c2cdd8d5c9bdb2a89d9083776b6054483c32271b0f03000916232f3c4956626f7c8995abb5c0cbd7e3e6d9cdc0b3a69a8d8073675d54524c525455546774808d9aa7b3c0cddae1d5c9bdb2a895897c6f6256493c2f2316090013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605355626e7b8896a1acb9c5d2dee0d3c7bbafa3998b7f7265574d42362a1e12050000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2e3a4653606d798698a2aebac7d3e0e3d6cabdb0a3978a7e7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c777b7e8184868a8d90929897999b9d9e9fa3aba2a2a3a2aaa29f9d9b9795908b857f79706b605c544b423930261c110600000000000013202c3946535f6c7986929facacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca89c8f8275695c4f4236291c0f0000000000000000000000000000000000000008131e28313a46535f69737f8c96a0acb7c1bfbab2aca59e97928b87929facb9c5d2dfe3d7cabdb0a4978a7d7164574a3e3124170b000008121c262e363b3f404242424242424242424b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e51444242424242424242423b3a36302921170d0200000916232f3c4956626f7c8995aab3becad6e2e9dccfc2b6a99c8f8376685e52463b3026292d303132323232323232323232323232323232322e2d2a251e170e050000000000000c1825323f4b5865727e8b98a5b1becbc4b7aa9e91847767686a676d6e6e6e6e6d676a686663605c54544e46423c3331302d28221a1208000000000000000a15202b343c4347494b4b4a494746443f43434241414141434e586a7683909da9b6c3d0dce9dcd0c3b6a99d9083766a5d5043372a1d100400000000050e161e252a2d303a444c52545454545454545454545454545b666f7c8895a0acb8c4d1dee6dbd0c2b6a99c8f83766953493f33271b0f0300000006101820262b2e2f3737373737373737373737373737313c4754606a76828f9ca6b0bcc7d3d9cec4b8aca095897d7063584e43372b1f1306000a1623303d495663707c8996a3afbcd1dce8e4d7cabdb1a4978a7e7164554b464145474d566975828f9ca8b5c2cfdbded2c5b9aca196877a6d6154473a2e2114070013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053535f697884919eabb7c4d2dde3d7cbc0b5ab9d908376695f53463a2d21150a0000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473b3b3d4855626f7b8895aab4bfcad6e2e3d7cbc0b5ab96897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727f888b8e91939a9a9d9fa2aaa6a8a9abacafb5afafafafb4aeacaaa7a79f9d98928c847d736d665c544b42382e23170c03000000000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b5a89c8f8275695c4f4236291c0f000000000000000000000000000000000000010d19242f3a43505a616e7b86929fa8b2bdc9cbc3bdb8afa9a19e999299a3afbbc7d4e0e3d7cabdb0a4978a7d7164574a3e3124170b00020e19242e3840474b4d4f4f4f4f4f4f4f4f4f4f5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e514f4f4f4f4f4f4f4f4f4f4846423b33291f140900000714212e3a4754616d7a8798a2aebac6d3dfecdfd2c5b9ac9f92867a6d61564d42382f2c282327262626272727282829292a24292c2d2e2f2e2b261f180f06000000000000000b1825313e4b5864717e8b97a4b1becac6b9ac9f93867a6d60555d6061616161605d555c595653514b47433e3e3e3e3e3d39332c241a10050000000000030f1b27323c464e54555858575554535049504f4f4e4e4e4d4c535f6a7885919eabb8c4d1deeaddd0c3b7aa9d9084776a5d5144372a1e1104000000020c1620283036393a434241464747474747474747474747474a54606a7783909daab6c3d0dde9ded1c4b7ab9e918478655b5044372b1f12050000040e18222a32373b3c44444444444444444444444444444444434e5863707d89949fabb7c4d0ddd4c8bcb1a79c8f82766a6054473b2e221508000a1724303d4a5763707d8a96a3b0bdc9d6e3e3d6c9bcb0a396897d7063564a3d363946525e687784919daab7c4d0ddded1c4b7ab9e918478685d5246392d2013070013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534d576774818e9aacb6c0ccd8e4dcd1c7b7ab9f95887b6e6155483c31261b0f0000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053484848494f5965717e8b98a4b1bed0dbe7e0d4c7bbafa399887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a969a9d9fa4aca9acaeb4b3b5b6b8b9bbc0bbbcbcbcbfbab8b7b4b1abaaa29f96918880786d665c544a3f34281e150b000000000013202c3946535f6c7986929facb9c5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c2b5a89c8f8275695c4f4236291c0f00000000000000000000000000000000000004111d2935414c55616c76828f98a3aebac3ced7cec8c1bbb3adaba39fa3abb5c0cbd7e3e3d7cabdb0a4978a7d7164574a3e3124170b0007131f2a36404a52585a5b5b5b5b5b5b5b5b5b5b5b64717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5b5b5b5b5b5b5b5b5b5b5b54524d453b30251a0e02000713202d3946525e687885929fabb8c5d2deebe0d3c7baaea3988c7f73685e544a423b38342e3333333333343434353536372f35393a3b3b3a37312a21180e030000000000000a1724313d4a5764707d8a97a3b0bdcac7bbafa499887c6f625551535455555453514b4f4c4b4b4b4b4b4b4b4b4b4b4a49453e362c22170c000000000006131f2b37434e5860626564636261605b535d5c5c5b5b5a5a565e626f7c8897a1adb9c6d2dfe9ddd0c3b6aa9d9083776a5d5044372a1d110400000008131e28323a414647504e4d4b4947464142403f3e3e3d3e3e424e586774808d9aa7b3c0cddae6dfd2c5b9ac9f9286796c605346392d20130600000a15202a343c43474951515151515151515151515151515151515154606b7683909ca9b6c3cfdcd9cdc3b7ab9f94887c6f6255493c2f221609000a1623303d495663707c8996a3afbcd1dce8e3d6cabdb0a3978a7d7064574a3e3e414b55616e7a87939facb9c6d2dfdbcec1b5a89b8e827568564c4135291d11050013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534b5764717e8a9aa4afbbc8d4e0e3d3c7bcb1a7998c7f7266584e43372b1b110600000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60545454555559616b76828f9ca9b6c2cfdce9dfd2c5b9ac9f9286796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b889aa4aaacafb6b6b8babfbfc1c3c4c5c7cbd1c9c9d0cac6c5c3c1bcb8b3aea9a19a938d81786d665c50443e30271d12070000000013202c3946535f6c7986929facb9c5d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cfc2b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000613202c3945515d67717e8a949faab4bfc9cfd6d9d4cdc5beb9b5afacafb5bdc7d1dce8e3d7cabdb0a4978a7d7164574a3e3124170b000b17232f3b47525c6467686868686868686868686868717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b686868686868686868686868615e574d42362a1e12050005111e2a36414c566a7683909da9b6c3d0dce9e3d7cbbfb4aa9f92857b6e665c544d4645404140404040404041414242434444404547484847423c332a1f15090000000000000a1723303d4a5663707d8996a3b0bcc9ccc0b5ab978a7e716458585858585858585858585858585858585858585858575550483e33281d1105000000000815222e3b4754606a6f7271706f6e6c656a6969686867676767686d75828f9ca9b3bec9d5e1e9dccfc3b6a99c908376695d5043362a1d10030000010d1925303a444c52545c5b59585654524d4f4d4c4b4a4a4a4b4a515766737f8c99a6b2bfccd9e5e0d3c7baaea399867a6d6053473a2d20140700030f1b26323c464e53555d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d596774808d9aa7b3c0cddadfd3c7bbb0a6988c7f7265594c3f3226190c000916232f3c4956626f7c8995abb5c0cbd7e3e5d8ccbfb2a5998c7f7266594f4b4a4c515c67727e8b9aa4afbbc8d4e0d5c9beb3a9998c7f7266594c3f3024190d010013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534754616d7a87939facb9c6d2dfe4d8cdc2b7aa9d9084776a5f5347382d22170b00000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d616161616162656b707d8a949fabb7c4d0ddeaddd0c3b7aa9d908477675c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86939facb9bbc0c3c5c6cad0ced0d1d2d4d7dcd5d6dbd6d3d2d0cdc8c5bebab2aca49f938f82786d60594f43392e23180c0000000013202c3946535f6c7986929facb9c5d2dfdfdfdfe9e2dbd6d3d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cfc2b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000714212d3a4754606d7a85919ea1a8afb9bdc4ccd5dad7cfcac7c0bbb9bbc0c7cfd9e3eee3d7cabdb0a4978a7d7164574a3e3124170b000d1926333f4b58646e73757575757575757575757575757e8a97a4b1bdcad7e4ddd1c4b7aa9e918477757575757575757575757575756e695e52463a2d20140700010d192530414e5b6774818e9aa7b4c1cfdae5e7dcd1c6baada2978f82786d665f5753514b4e4d4c4d4d4d4d4e4e4e4f5050514b51535455534d453c31261a0e0200000000000916232f3c4956626f7c8995a2afbcc8d2c0b3a6998d8073666464646464646464646464646464646464646464646464615a5045392d211408000000000916222f3c4955626f7c7f7e7d7c7a7978777676757474747474767a818e949eaabbc4cfdae6e8dbcec2b5a89b8f8275685c4f4235291c0f02000005111d2a36414c565e616968666463615e565c5a595857575758545c606974808d9aa7b4c0cddae7e3d7cbbfb4ab93877a6d6054473a2d2114070006131f2b37434e585f626a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a74808d9aa7b3c0cddae3d8ccbfb2a5988c7f7265594c3f3226190c000815222e3b4855616e7b8899a3afbbc7d3e0e9dccfc2b6a99c8f83766b60595757555d606d7984919eacb6c0ccd8dfd2c6b9ada197887c6f6255493c2f221608000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347525e687783909daab7c3d1dce7ded1c5b8aca095887c6f6253493f33271b0f03000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6e6e6e6e6e6e6f71757d85929fa6b0bbc7d3dfe3d7cbc0b5ab9b8e817468554b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d677885919eabb8c4ccd2d2d3d6d6d3d2d1d0cfcfcfcecfd0d2d3d6dcd8d4d0cac4beb6afa69e948d80736b61554b4034281c110600000013202c3946535f6c7986929facb9c5d2dfecf3e9e0d7d0cac6c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c2b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000714212d3a4754606d7a818991969da5adb2bac0c9ced8dad6d1cbc7c5c7cbd1d9e1ebf5e3d7cabdb0a4978a7d7164574a3e3124170b000d1a2734404d5a6773808282828282828282828282828183909da9b6c3d0dce9dfd2c5b8ac9f928681828282828282828282828282817b6e6154483b2e2115080000081825323e4b5865717e8b98a8b2bdc9d5e1ede2d6cabeb3a99e948e81786e6963605c545a5a5959595a5a5a5b5b5c5c5d5e555d6061625f574d42372b1e120600000000000915222f3c4855626f7b8895a2aebbc8cfc2b5a89c8f82757171717171717171717171717171717171717171717171716c6155493d3023170a000000000d192633404c5966737f8b8b8a8887868584838282818181808183868e939ea6b0bbcdd6e1ebe6dacdc0b3a79a8d8074675a4d4134271a0e0100000713202d3946525e686d767573716f6e686a686765646464646566666d717b85929fabb8c5d2deebe3d7cbbfb4ab94877a6d6154473a2e211407000815212e3b47535f6a6f77777777777777777777777777777777777777777777808d9aa7b3c0cddae5d8cbbfb2a5988c7f7265594c3f3226190c000713202d3a4653606d7986929facb9c5d2dfecddd0c4b7ab9f94897d706b66646465676d74808d96a1acbec7d2ddded1c4b8ab9e9185786c605346392d201306000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474c566773808d9aaab4bfcbd7e3e0d4c8bcb1a7998d8073655b5044372b1f1206000000000013202c3946535f6c7986929facb9c5d2dfe1d4c8bbaea195887b7b7b7b7b7b7b7c7e82899297a2adb8c2ccd8e3e0d4c7bbafa3998a7e7164574b3e2e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55697683909ca9b6c3cecccbc9d0cac6c5c4c3c3c2c2c2c2c3c5c7cbd0d3d8dbd6d0c7c0bbb0a69f93887d70675c5145382e23170b00000013202c3946535f6c7986929facb9c5d2dfecede2d7cec6bfbab8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000613202c3945515d676d747d848e939ea1a8afb9bdc4ccd2d9dcd7d4d2d4d7dce3ebf3f0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a77848e8e8e8e8e8e8e8e8e8e8e8e8e90959fabb7c4d1ddeadfd3c6baaea298928e8e8e8e8e8e8e8e8e8e8e8e8e887c6f6255483c2f22150900000815222f3b4855626e7b8896a1adb9c5d2dfeae6dbcfc5bbb0a69e938e827b75706d66686766666666666767676868696a6a6b676d6e6e695f53473a2e21140800000000000815212e3b4854616e7b8794a1aebad1d1c4b8ab9e91857e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7164574a3e3124170b000000010d1a2734404d5a6773808d97969599939291908f8f8e8e8d8d8e8f92989ea5afb8c1ccdfe8eee2d5c9beb3a9988b7e7265584b3f3225180c0000000714212e3a4754616d7a8281807e7c7a787775737271717071717375797e849197a2adbac6d3dfece0d3c7baaea399867a6d6053473a2d201407000916222f3c4955626f7c8384848484848484848484848484848484848484848385929eabb8c5d1dee5d8cbbfb2a5988c7f7265594c3f3226190c0006121f2c3844505c667784919daab7c4d0dbe7dfd3c7bbb0a69e92857d7673717172747a818d929da8b2bdd0d9e4d4c8bdb2a89a8e8174655b5044372b1f1205000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474a5663707d8998a3aebac7d3e0e5d9cec3b7ab9e9184786c605346392e23170c000000000013202c3946535f6c7986929facb9c5d2dfecd5c9bcb0a4988d88878787878788888b8f949fa2a9b3becad4dee4d9d0c5b9ac9f92867a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f424e5b6875818e9ba8b4c1c1bfbebdbbbebab8b7b7b6b5b5b5b5b7b8babfc6c7cdd4dcd9d2ccc1bbafa49a9184796d60544a3f34281c1003000013202c3946535f6c7986929facb9c5d2dfece7dbd0c6bcb4aeacacacacacacacacacacacacacacacacacacacacaca89c8f8275695c4f4236291c0f00000000000000000000000000000000000004111d2935414c555d606b707a818991969da5acb2bbc0c7d0d8dde0dfe0e3e8eef5fdf0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909b9b9b9b9b9b9b9b9b9b9b9b9d9fa7b1bcc7d3e0ece2d6cabfb4aaa29f9b9b9b9b9b9b9b9b9b9b9b9b95887c6f6255483c2f22150900000814212e3a47535f697884919eabb7c3ced9e4ece1d7cdc1b8afa59e949086817d797775747373737373737474757576777778797a7b7b6e6255483b2f22150800000000000714212e3a4754616d7a8794abb5bfcbd2c6b9ada197918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b85786b5e5245382b1f12050000010e1b2734414e5a6774818d9aa3aba49f9e9d9c9c9b9b9a9a9a9a9c9fa3aaafb7c1cad3def1ecdfd2c6b9ada197887c6f6255493c2f2216090000000915222f3c4855626f7b888e8c8b8987858382807f7e7d7d7d7e8082858a9196a1a9b3becad6e2ecdfd2c5b9ac9f9286796c605346392d20130600091623303c4956636f7c899090909090909090909090909090909090909090909297a1adb9c6d2dfe5d8cbbfb2a5988c7f7265594c3f3226190c0003101c28343f4a546774818e9aaab4bfcad6e3e4d8cdc2b9ada2979289837f7e7d7e81858e939da4aebac4cee2dcd1c5b8aca096897c6f6353493f33271b0f03000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474753606d7986929facb9c5d2dfecded2c5b9aca196897c6f63544a3f34281c10030000000013202c3946535f6c7986929facb9c5d2dfecd8ccc0b4a99f989594949494949495989c9ea6adb3bcc5d0dce8ddd2c7beb1a79c8f8275685d5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2633404d596673808c99a6b3b6b4b3b1b0afb3aeababaaa9a9a8a8a9aaacaeb4b7bcc2cad2dbddd8ccc0b6aca1968c7f72665c5044382b1f1206000013202c3946535f6c7986929facb9c5d2dfece2d6cabfb4aaa29f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c8f8275695c4f4236291c0f000000000000000000000000000000000000010d19242f3a434c515961676d747d848e939ea1a8afb6bec4ccd2d9e2e8eef4f9fffdf0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909da8a8a8a8a8a8a8a8a8a8a8a9abb1b9c2cdd8e4f0e7dbd0c5bcb4aeaca8a8a8a8a8a8a8a8a8a8a8a295887b6f6255483c2f221509000006121e2b37424d576774818d9aa7b1bcc8d4e0ebe9dfd3cac1b7afa69f98928e8986838181807f80808080818181828383848586868784786b5e5145382b1e1205000000000713202d3a4653606d798699a3aebbc7d3c9beb2a9a19e97979797979797979797979797979797979797979797979185786b5e5245382b1f12050000020f1b2835424e5b6875818e9ba8b5afacabaaa9a9a8a7a7a7a7a7a9acaeb4bcc1c9d3dce5ede2d8cec5b8ab9e9285796c605346392d2013060000000a1623303d495663707c89969997969892908f8d8c8b8a8a8a8b8c8f92979ea1a8b2bbc5d0dbe6eaddd1c4b7aa9e918477655b5044372b1f120500091623303c4956636f7c89969d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea1a9b3bec9d5e2e5d8cbbfb2a5988c7f7265594c3f3226190c00000c17232e3e4a5764717d8a98a2aebac7d1dce8ded6cabeb3a9a29e94908c8a8a8b8e92979da5aeb6c0ccd6e0d5c9bdb2a89d9184776b605441382d22170b00000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534745515d6776838f9ca9b6c2cfdbe6e1d5c9bdb2a89a8d8174665c5044382c1f12070000000013202c3946535f6c7986929facb9c5d2dfecdcd1c6bbb1a9a4a1a1a1a1a1a1a1a2a4a8aab0babec5ced7e1ddd8ccc0b6ac9f95897d7063564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4aaa9a7a6a5a3a2aaa29f9e9d9c9c9c9b9c9d9fa3aaabb0b8c0c9d2dfddd2c7beb2a89e9285786d6053463a2d201308000013202c3946535f6c7986929facb9c5d2dfecdfd3c6baaea29892929292929292929292929292929292929292929292928f8275695c4f4236291c0f0000000000000000000000000000000000000008131e28313a41454f555d606b707a818991969fa4acb2bbc0c7d0d8dde4ebf4f9f1f0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab5b5b5b5b5b5b5b5b5b5b6b7bcc2cbd4dee9f5ece2d7cec5bfbab8b5b5b5b5b5b5b5b5b5b5aea295887b6f6255483c2f2215090000020e1a26313d495663707c8995a0acb8c4cfdae5f0e5dcd2c9c1b8b0aaa39f9b9992908e8d8d8c8c8c8d8d8d8e8e8f8f90919192999185786b5e5245382b1f07000000000006131f2c3845515c667986929facb9c5d2cfc4bbb2adaba4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49e9185786b5e5245382b1f12050000020f1c2935424f5c6875828f9ba8b5bbb9b8b7b6b5b5b4b4b4b3b4b6b8babfc6ced3dbe5ebe4dcd0c6bcb0a69a8e8174665b5044382b1f12060000000b1824313e4b5764717e8a97a4a4aaa29f9d9b9a989797979798999b9ea1a9adb2bac4cdd7e1ece9dbcfc2b5a89c8f82756953493f33271b0f0300091623303c4956636f7c8996a2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadb3bbc5cfdae6e5d8cbbfb2a5988c7f7265594c3f3226190c00000614202d3a4753606d7985929fabb5c0cbd7dfe6dbcfc5bbb3ada69f9c999797989b9fa2a9afb7c0c8d2ded7cec6b9ada1968b7f7265594f432f261b110600000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347404b5566727f8c99a9b3becad6e2e5dacec4b8ab9e9285796d6053463a2f24180c0000000013202c3946535f6c7986929facb9c5d2dfece2d7cdc4bbb4b0aeaeaeaeaeaeaeafb1b5b7bbc1cad0d7e0dcd7cbc3bbafa49a9083766b6054443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c89969f9e9c9b999896959498929190908f8f8f8f9092989c9fa6afb7c0cdd6e0d9d0c4b9ada197897d7063564a3d2f24190d010013202c3946535f6c7986929facb9c5d2dfebdfd2c5b8ac9f928685858585858585858585858585858585858585858585858175685b4f4235281c0f00000000000000000000000000000000000000010c161f282f353d434c515960676d747d848d939aa1a8afb6bec4ccd2d9e2e8e4e4e4e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c1c1c1c1c1c1c1c1c1c3c4c7cdd4dde6f0f2f3e9e0d7d0cac6c5c1c1c1c1c1c1c1c1c1bbaea295887b6f6255483c2f2215090000000916222f3b4854606b7783909da8b2bdc9d5dee8eee4dbd2cac2bcb4aeacaba39f9d9b9a99999999999a9a9a9b9b9c9d9d9e9f9f9285786c5f52452e23180c000000000004101c2834404b546b7885929eabb8c5d1d6cdc4beb9b8b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ab9e9185786b5e5245382b1f1205000003101d293643505c6976838f9ca9b6c2c6c5c4c3c2c2c1c1c0c0c1c2c5c7cbd0d8e0e5e5e2d9d2cbbfb4aa9e94887c6f62544a3f33281c0f030000000c1925323f4c5865727f8b98a5b1b4aeabaaa8a6a5a4a4a3a4a4a6a8abadb3b9bdc4ccd6dfe9e9e0d4c8bcb1a7998c7f7266594c3f2d22170b0000091623303c4956636f7c8996a2afb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b8b9bec5cdd7e1ece5d8cbbfb2a5988c7f7265594c3f3226190c000006131f2c3845515d6774818d99a3afbbc3cdd7dfe1d7cdc5beb9b0aba9a6a4a4a5a7abadb3bbc0c9d2dad9d0c6bcb0a69e9184796d6053463d3220140a0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473c4956626f7c8997a2adbac6d3dfebdfd2c6b9ada1978a7d7063554b4035291d100400000013202c3946535f6c7986929facb9c5d2dfece9dfd6cdc6c0bcbbbabababababbbbbec2c3c7ccd6dbdfd8d1cbc1b9b0a69f93887c6f62594f4432281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b879992918f8e8c8b8a888786858484838282828284868a90949da5afbbc4cfdae2d5c9beb3a99b8e817468564c4135291d11040013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada09386797979797979797979797979797979797979797979797979756f65594d4134271b0e0000000000000000000000000000000000000000040d161e2429313a41454f555d606b7079818891969fa4acb2bbc0c7d0d8ddd8d8d8d8d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c3cecececececececed0d1d3d8dee6e5e5e5e5e5e9e2dbd6d3d2cecececececececec8bbaea295887b6f6255483c2f2215090000000713202c38444f5964717e8b96a1adb9c1ccd6dfe8ede4dcd4cec6bfbab8b4aeacaaa8a7a6a6a6a6a6a6a7a7a8a8a9aaaaabac9f9285796c5f4b4034281c100400000000000c18232e45515e6b7884919eabb7c4d1ded6cfc9c6c4bebebebebebebebebebebebebebebebebebebebeb8ab9e9185786b5e5245382b1f1205000004111d2a3744505d6a7783909daab6c3d0d1d0cfcfcececdcdcdcdcfd2d3d6dce2e0dfdad5d0c7c0baaea3988f82756a5f5442382d22170b000000000d1a2633404d596673808c99a6b3bebab8b6b5b3b2b1b0b0b0b1b3b5b8b9bec5c9cfd6dee8e8e0d7cec5b8aca095887c6f6255483c2f2215060000091623303c4956636f7c8996a2afbcc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5c6c9cfd7dfe9f3e5d8cbbfb2a5988c7f7265594c3f3226190c000004101d2935404b55616e7b87929fa7b1bbc5cdd6dedfd7cfcac2bcb7b6b2b1b0b1b4b8babec5cdd2dbdbd2c7beb4aa9f948b7e71675c5145382c1f13020000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a4653606c7985929fabb8c5d2dee5e2d5c9beb3a99b8e8175675d5145392c1f130800000013202c3946535f6c7986929facb9c5d2dfe5e5e5dfd7d1ccc9c8c7c7c7c7c7c7c8cbcfd0d3d7dbd6d3cfc6bfbab0a79f948d80736a6054473d3320160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c78878886848381807e7d7c7a79787877767675757677797d828e939da9b2bdc9d5e1dacfc4b7aa9e918477685d5245392c2013060013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53483d3125180c000000000000000000000000000000000000000000040c13191f282f353d434c515960676d747d848d939aa1a8afb6bec4ccd2cbcbcbcbcbcabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c3d0d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d5c8bbaea295887b6f6255483c2f22150900000003101b27323d4653606d7984919ea5afbac4ccd6dfe5ebe6e0d8d0cbc7c5bfbab9b6b4b4b3b2b3b3b3b3b4b4b4b5b6b6b7b8ac9f938679665c5145382c1f13060000000000071e2a3744515d6a7784909daab7c3d0dde0dad5d2d1cacacacacacacacacacacacacacacacacacacac4b8ab9e9185786b5e5245382b1f1205000004111e2b3744515e6a7784919daab7c4cad0cfd1d2d4d8ddd8d8d9d9d9d9d9ddd8d4d2cec9c4beb6afa49f92867c6e62584e432f261c1106000000010e1b2834414e5b6774818e9aa7b4c1c6c5c3c2c0bfbebdbdbdbebfc2c5c6cacfd5dae0e6e3dcd7cec5bcb1a79d9083776a5f53473b2e2115080000091623303c4956636f7c8996a2afbcc9d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d1d2d5dae1e9e4e4e4d8cbbfb2a5988c7f7265594c3f3226190c0000000c18242f3946535e6973808d95a0a9b3bbc4ccd4d9e0dbd6cdc7c4c3bfbdbdbec1c5c6cacfd7dfd7d0cac0b6aca2989082776c60554b4034281c10040000000013202c3946535f6c7986929facb9c5d2d9d9d3c6b9ada093867a6d6053473a44505b6675828f9ba8b5c2cedad9d9dacfc5b8ac9f9285796d6053473a3024190d01000013202c3946535f6c7986929facb9c5d2d9d9d9d9d9d9d9d9d9d4d4d4d4d4d4d4d5d7dbd6d3d2d0cac6c1bcb4aea69e958f82786d60584e43352b210e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666f7c7b797776747372706f6e6d666b6a6969696869666d7077818e96a1adb9c5d2dfdfd2c6b9ac9f93867a6d6054473a2d2114070013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b59534b42372c2015090000000000000000000000000000000000000000000001080d161e2429313a41454f555d606b7079808891969fa4acb2bbc0bebebebebebebebdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c3ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc8bbaea295887b6f6255483c2f221509000000000b161f2c3844515c66717e8a939ea8b2bac4cdd5dae0e4eae2dcd6d3d1cbc7c5c3c1c0c0bfbfbfc0c0c0c1c1c2c2c3c4bbafa49a86796d6053463a2d2013070000000004101d2a3743505d6a7683909da9b6c3d0d8d8d8d8d8d8d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d1c4b8ab9e9185786b5e5245382b1f1205000005121f2b3845525e6b7885919eabb8babfc0c3c4c6c8ccd2cbcbcccccdccccd2ccc8c6c3bdb9b2aca49f928b7f726a5f53463c321d140a00000000020f1c2935424f5c6875828f9ba8b5c2ced2d0cecdcbcacacacacbccced1d2d6dae1e0dfdbd6d1cbc4bcb3a99f958a7e7164584e43372b1f12060000091623303c4956636f7c8996a2afbcc9d5d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8cbbfb2a5988c7f7265594c3f3226190c00000007121d2a36424d57606d79839197a2a9b2bac1c8cdd3d6dbd8d3d0cfcccacacbced2d3d6dbd8d4cec5bebaafa49a92867b6e655b5043392e23180c000000000013202c3946535f6c7986929facb9c5ccccccccc6b9ada093867a6d6053473a3f4a5465727e8b98a8b2bdc9ccccccccccc6baaea2988a7e7164564c4135291d1105000013202c3946535f6c7986929facb9c5cccccccccccccccccccccccccccccccccccbcbd0cac7c5c3bebab8b0aaa39f948f83796d665c50463d32231a0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54606b6f6e6d6669686665636261605c545d5d5c5c5c545c60656d7984919eabb8c4d1dee0d4c8bbafa49a897c6f6356493c302316090013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605352525252525252525252525252525252525252524f4d48423930251b0f04000000000000000000000000000000000000000000000000040c13191f282f353d434b515960676d747d848d939aa0a8afb6b1b1b1b1b1b1b1b1b0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbbaea295887b6f6255483c2f2215090000000004101c2834404a54616c75818e96a1a8b2bbc1c9cfd4d9dedfe2e3e0dcd7d3d2d0cecdcccccccccccdcdcdcececfd0ccc0b6a093877a6d6054473a2d2114070000000003101c2936434f5c6976828f9ca9b5c2cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc4b8ab9e9185786b5e5245382b1f1205000005121f2b3744505b657985929fa8acaeb4b3b6b8b9bbc0bdbebfbfc0c0c0bfbec0bbb9b7b2aca8a09a938c80736d62584e43342a200b020000000003101d2a3643505d697683909ca9b6c3c6c8ccd2d1d2d5dad6d7d7d9d9d9d9d8dcd6d3d2d0cac7c0bbb2aaa2979083786c6053463c32261b0f030000091623303c4956636f7c8996a2afbcc9cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbbfb2a5988c7f7265594c3f3226190c000000010e1a25313b45515d676e7b859297a0a8afb8bcc3c7cad0d2d3d7dcd8d7d7d8d9ddd8d4d2cdc7c2bcb3aea39f93887e70695f53493f30271d1207000000000013202c3946535f6c7986929facb9bfbfbfbfbfbfb9ada093867a6d6053473a3b4855616e7b8896a1acb9bfbfbfbfbfbfbfbfb4aa9c8f8275685d5246392d201409000013202c3946535f6c7986929facb9bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbebdbfbab8b6b4aeaba69e98928c82796d675d544a3f342b201108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424f59606361605c545b595857555453514b51504f4f4f4b51535c6774818e9aa7b4c1cddae4d8ccc0b6ac978a7d7064574a3d3124170a0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474646464646464646464646464646464646464642413d3730271e1409000000000000000000000000000000000000000000000000000001080d161e2429313a41454f555d606b7079808891969fa4aca5a5a5a5a5a5a5a5a5a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2aea295887b6f6255483c2f22150900000000000c18232e3942505a616d7a849196a1a9afb9bdc4c8cdd2d3d6dbd9d9dadadbdadadad9d8d7ddd7d4d2d1cfced1cbc7baada094877a6d6154473a2e21140700000000020f1c2935424f5c6875828f9ba8b5bebebebebebebebebebebebebebebebebebebebebebebebebebebebeb8ab9e9185786b5e5245382b1f120500000613202d394653606c798693989c9fa2aaa7a9abacafb6b1b1b2b2b3b3b3b3b2b6afacaaa8a19e9691887f736e645b51463c3122190e000000000003101c28343f4a546b7784919eaab1b6b9bbc0c3c5c6c9cfcbcbcccccdcccccbd0cbc7c5c3bebab5afa8a19892857b6e665b5044382a20150a000000091623303c4956636f7c8996a2afbcbebebebebebebebebebebebebebebebebebebebebebebebebebebebebeb2a5988c7f7265594c3f3226190c0000000009141f2935404b555f696f7c8591969ea5abb1b8babfc3c5c7cbd1cccccccdccd2ccc8c6c2bcb8b0aaa29f918c7f726c61574d41382d1e150b00000000000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2ada093867a6d6053473a3a47535f697884919eabb2b2b2b2b2b2b2b2b2b2ac9f92867a6d6154473b30251a0e020013202c3946535f6c7986929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b1b4aeaca9aaa29f9a938f867f786d675d554b42382e22190f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3d464f54565553504a4e4d4b4a49474645404443434241464b51596673808c99a6b3bfccd9e8ddd2beb1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4847433c343534312c251e150c0200000000000000000000000000000000000000000000000000000000040c13191f282f353d434b515960676d747d848d939a9898989898989898989898978a7d7164574a3e3124170b00111e2a3744515d6a7784909da6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a295887b6f6255483c2f221509000000000007121c27303e46525d686e7b8491969ea5adb2b8bcc2c5c6cad0cccccdcecececdcdcccccbd2ccc7c6c4c3c1bfbfbab9aea194877b6e6154483b2e21150800000000020e1b2835414e5b6874818e9ba7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ab9e9185786b5e5245382b1f120500000714202d3a4753606d7984888b8f9298979a9c9e9fa4aca4a5a5a6a6a6a6a6a5aca49f9d9a96918b847d736d645c52493f332a201007000000000006121f2b3844505c667885929d9fa7aaacafb6b6b8b9bebdbebebfc0c0c0bfbebebfbab8b6b3adaba39f9691867d70695f544a3f3328180e04000000091623303c4956636f7c8996a2afb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a5988c7f7265594c3f3226190c00000000030c18242f39434d57606a6f7c848e939da0a7acaeb4b7b9babfbebfbfc0c0bfbfc0bbb9b6b1aba69f98928a7f726d635a50453c2f261b0c0300000000000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a093867a6d6053473a37424d576774818e9aaca6a6a6a6a6a6a6a6a6a6a6a3998b7e7265574d42362a1e12050013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a5a5a5a4aaa29f9d9a98928e88827c726c665d554b433a30261c10070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2b343d4348494846443f41403f3d3c3b3a3836383f44464c52555d606b75818e9ba8b5c1cedbe5d8cbbeb2a5988b7f7265584c3f3225190c0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c322625201b140c0300000000000000000000000000000000000000000000000000000000000001080d161d2429313a40454f555d606b707980878b8b8b8b8b8b8b8b8b8b8b8b8b8a7d7164574a3e3124170b00111e2a3744515d6a778490999999999999999999999999999999999999999999999999999999999999999999999999999999999995887b6f6255483c2f2215090000000000000b151e2935414c565f696e7b848f939ea1a8acb1b5b8babebebfc0c0c1c1c1c0c0c0bfbebdc0bbb9b8b6b4b2b4aeacaaa194887b6e6155483b2e22150800000000010e1b2734414e5a6774818d9aa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59e9185786b5e5245382b1f1205000006131f2c3845515c676d777b7e8285888b8d9091939a9697989899999a999998979a93908d89847f79706b635b524a40372d21180e0000000000000713202d3a4653606d78868b90959a9d9fa4aca9abadb3b0b1b2b2b3b3b3b3b2b1b4aeaca9a9a29f99928e847c706b60574d42382d22170600000000091623303c4956636f7c8996a2a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5988c7f7265594c3f3226190c000000000007121d27313c454e58606a6f7a818990959b9fa2aaaaacaeb4b1b2b3b3b3b3b2b6afacaaa79f9d948f857e726d635b51483e332a1d140a0000000000000013202c3946535f6c79869299999999999999999999999993867a6d6053473a313e4b5764717e8a9a9999999999999999999999999999908376695e52463a2d2014070013202c3946535f6c798692999999999999999999999999999999999999999999989897969892908d8a85817c756e6a605b544b433a31281e150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b19222b32383b3c3b3a38342e3332302f35383b42464a5053565e61676d737d87929facb9c5d2dfe4d7cbbeb1a4988b7e7165584b3e3225180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6767676767676767676767676767676767625f584e43372b1f120f0902000000000000000000000000000000000000000000000000000000000000000000040c13181f282f353d434b515960676d747c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b6e6155483b2e22150800111e2a3744515d6a77838c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c887b6f6255483c2f221509000000000000030c1924303a444d575f696e7a818b91969da0a7a8abadb3b1b2b3b3b4b4b4b4b3b3b2b1b0b5afacaba9a8a6aba39f9d9b95887b6f6255483c2f22150900000000000d1a2733404d5a6673808d989898989898989898989898989898989898989898989898989898989898989898989185786b5e5245382b1f1205000004101c2934404b555c60696e7275797b7e8083858688898a8b8c8c8d8d8d8c8b8a898684807c78726d676059514940382e251b0f0600000000000006121f2b3844505c666d7a7e83888d90939a9a9c9ea1a9a4a4a5a6a6a6a6a6a5a4aaa39f9d9a97928d87817a6f6a60594f453c2f261c110600000000091623303c4956636f7c899698989898989898989898989898989898989898989898989898989898989898989898988c7f7265594c3f3226190c0000000000010b151f2a333d464e585f686d757d83898e92989a9d9fa3aba4a5a6a6a6a6a5aca49f9d9995908a827b716c625b51493f362c21180b020000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c867a6d6053473a2e3a4754616d7a888c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e2115080013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a89888583807d79746f6a625f58504a423a31281f160c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101921272c2f302e2d2b28262b3136394045474d52545c6063686e737980879299a3aebbc7d3e0e4d7cabdb1a4978a7e7164574b3e3124180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada09386797474747474747474747474747474747474746f6a5f53473b2e21150800000000000000000000000000000000000000000000000000000000000000000000000001070d161d2429313a40454f555d606a6f72727272727272727272727272726e695f53463a2d211407000b1825323e4b5865717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d6154473a2e2114070000000000000008131e28323b454d575f686d757e848a9095989c9fa2a9a4a6a6a7a7a8a7a7a7a6a5a4a3aba49f9e9c9b99979992908e8b887c6f6255493c2f22160900000000000d192633404c5966737f8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b85786b5e5245382b1f12050000000c18232f39434b51575f6165666d6f71747678797b7c7e7e7f7f808080807f7d7c7a7774706c65605c554f4740372e261c12090000000000000003101c28343f4a545d676d72777c8083878a8d9092979597989899999a99999897969892908d8985807b746d6860584f473d332a1d140a0000000000091623303c4956636f7d898b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7f7265594c3f3226190c000000000000030d18212b343d464e565d606b70777d82868a8d90929996979999999a9999979a93908d88837d766e69615a51493f372e241a0f0600000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f786d6053463a2d3946525e68727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6255483c2f221509000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7c7b797674706d67625f58534e443f382f281f160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f22232220252a31373b42464b5153575e61666d70757a80858c9299a3abb5bfcbd7e3e2d6cabfb4aa96897d7063564a3d3023170a0013202c3946535f6c7986929facb9c5d2dfe7dacdc1b4a79a8e818181818181818181818181818181818181817c6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000040c13181f282f353d434b515860626565656565656565656565656565615f574d42362a1e1205000b1724313d4a56626d7173737373737373737373737373737373737373737373737373737373737373737373737373737373737373736d685e5246392d20130700000000000000020c16202a333c454d565e616c71787e83888b8f9297969899999a9b9b9b9a9a9999989796999391908e8c8a888684817e7c786d6053463a2d20130700000000000915222f3c4855626f7c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7164584b3e3125180b0000000007121d27313940454d5355545c6062646769676d6e70717272737373737372716f6d676763605b53514b433d352e251c140a0000000000000000000b17232e38424c555d60656a6f73777a7e81838587898a8b8b8c8d8d8d8c8b8b89878683807d79746e69605d564e463d352b21180b0200000000000814212e3b4754616e7a7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7c6f6255483c2f22150900000000000000060f19222b343c444c525960636b70757a7d80838688898b8c8c8d8d8c8c8b898683807c76706b615f5750483f372e251c12080000000000000000000c1825323e4b57636d727373737373737373737373737373736d665c5144382c36414c56626d7273737373737373737373737373737373736f6a5f53473a2e211508000c1825323e4b57636d7273737373737373737373737373737373737373737372727271706e6c666763605d55544e47433c332d261d160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13141b222730363c43474d53555d6064696e72787d82868c92979fa3abb4bdc6d1dce7e0d3c6baaea298887b6e6155483b2e2215080013202c3946535f6c7986929facb9c5d2dfecdbcec2b5a99d938e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000001070d161d2429313940454e5456585858585858585858585858585855534d453b31261a0e02000915212e3a45505a62656666666666666666666666666666666666666666666666666666666666666666666666666666666666666666615e564c41362a1d11050000000000000000040e18212a333c444c525a62666d71777b7f828587898b8c8d8d8e8e8e8d8d8d8c8b8a8988868483817f7d7b797774726f6d665c5044382b1f120600000000000815212e3a47535f6a6f727272727272727272727272727272727272727272727272727272727272727272727272716c6156493d3024170a00000000010b151f272f343b4246484a505355585a555c6061636465656666676666656462605d5556535049454039312b231c130a0200000000000000000006111c26303a434c5154585f6267686d717476787a7c7d7e7f7f808080807f7e7c7b797674706d67625f57524c443d342b23190f060000000000000714202d3946525e686e72727272727272727272727272727272727272727272727272727272727272727272727272726f6a5f53473b2e2115080000000000000000071019222a323a41454f54596063676d717477797b7d7e7f808080807f7e7c7a77736f6a636159534d453e362d251c130a000000000000000000000a16222f3a46515b6366666666666666666666666666666666605c544a403428303a44515b62656666666666666666666666666666666666625f584e43372b1f1206000a16222f3a46515b6366666666666666666666666666666666666666666666666565646361605b545753514b47433c373128221c140b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e171d262d333b41464e53575e61676d71767b7f848a8f92999ea1a9aeb4bdc6cfd8e3ebdfd2c5b8ac9f9285796d6053463a2d2013070013202c3946535f6c7986929facb9c5d2dfecded1c5baafa59d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181f282f353d4348494b4b4b4b4b4b4b4b4b4b4b4b4b4b4846423b33291f1409000005111d29343f48505658595959595959595959595959595959595959595959595959595959595959595959595959595959595959595954524c443a3025190d01000000000000000000060f18212a323a414650545c6064696e7275787a7c7e7f80808181818180807f7e7d7c7b7978767573716e6d66686562605c544a3f34281c1003000000000006121f2b37434e585f6265656565656565656565656565656565656565656565656565656565656565656565656564615a5045392d2115080000000000030d151d232931363a3b3f4446484b4d4b51535556575859595a5a5a5958575653514b4946443f38342f271f19110a0100000000000000000000000a141e28313a4145474e5455565e61646769686d6f71717273737373737271706e6d666763605c55534d45413a322b221911070000000000000005111e2a36414c565e616565656565656565656565656565656565656565656565656565656565656565656565656565625f584e43372b1f120600000000000000000007101820282f353d44484f54555d606467666d6e7071727373737372716f6d6866625f58554f46423b332c241b130a010000000000000000000006121e2a353f4951575959595959595959595959595959595953514a42392e2329323f49515658595959595959595959595959595959595955534e463c31261b0f030006121e2a353f4951575959595959595959595959595959595959595959595959595857565553504a4a4745403937322b262017110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101820292f383f444d52585f62696e74797e82878c91969b9fa3abadb3babfc6cfd8e1eae1d7cbbfb5ab9c8f8376665c5044382c1f12060013202c3946535f6c7986929facb9c5d2dfece2d6cbc0b7afa9a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d161d242932383b3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b3a36312921180d030000010c18222d363f454a4b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4746413a32291e13080000000000000000000000060f18202830363e424a5053575f616569686d6f717373747475747474737271706f6e6d666968666462605c54585553504a42382e23170b000000000000030f1b26313c464e5355585858585858585858585858585858585858585858585858585858585858585858585858585650483e34281d1105000000000000030b12181f262a2d2e34383a3c3e4140454648494b4b4c4c4d4d4d4d4c4a494745403d3937332d29231d150d0800000000000000000000000000020c161f282f35393c4347494c5254575a565d6062646565666667666665646361605c545653514b47423c352f28201910070000000000000000020e1925303b444c5254585858585858585858585858585858585858585858585858585858585858585858585858585855534e463c32261b0f0300000000000000000000060d161e242933383d44484b515357545c606263646666666766666462605d5655534e48443e36312a211a120a010000000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4644403930271c202d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847433c342a20150a0000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b494846443f3d3a39352f2b26201a150b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061018222a323a414950565e616a6e757b80858b8f93999ea1a8acafb5b9bec5cbd1d8e1e9e2d9cfc7bbaea3998c7f7265544a3f34281c10030013202c3946535f6c7986929facb9c5d2dfece8ddd2c9c0bab5b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c121821272c2e2f32323232323232323232323232322e2d2a261f180f060000000006111b242d343a3d3e40404040404040404040404040404040404040404040404040404040404040404040404040404040404040403a3936302920170c02000000000000000000000000060e161e252a30383f44464d535558565e6163656666676868686767666665646361605c545b59575553504a4b4946443f3830261c1106000000000000000a15202a343c4347484b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b49453e362d22170c000000000000000001070c141a1e2123282b2d2f312e34383a3b3d3e3f3f40404040403f3e3c3a39352f2d2b27221b18120b03000000000000000000000000000000040d161e24292c32373b3c4146474a4e4c525456575858595a5a5a595858565453504a4a46454039373129241e160d070000000000000000000008141e29323b4146474b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4847433c342a20150a000000000000000000000000040c131921272c33383a4045474a4a505355565859595a5a5959585654524c4847433c38332a261f180f08000000000000000000000000000007121c252e353a3e3f4040404040404040404040404040403a38342e271e151b252d343a3e3f40404040404040404040404040404040403c3a37312a22180e0400000007121c252e353a3e3f4040404040404040404040404040404040404040403f3f3f3e3d3b3938332d2d2c29241d1b150f0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18222a343c444c535b60686e747b81878d92979c9fa4abadb2b9bbc0c7cacfd7dce2e6e0d7d0c7bdb3a99f92867a6e6154473b2e23170c000013202c3946535f6c7986929facb9c5d2dfeceee4dbd2cbc5c2c1c0c0c0c0c0c0c0c0c0c0c0c0c0bdb0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d161b1f2223252525252525252525252525252522211e1a140d0600000000000009121b22292e313233333333333333333333333333333333333333333333333333333333333333333333333333333333333333332e2d2a251e170e050000000000000000000000000000050c13191e262e34383b4246484b4c52545658595a5a5b5b5b5a5a5a595857565553514b4e4c4a4846443f3f3c3a38342e261e140a0000000000000000040e18222a31373a3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d39342d241b10060000000000000000000003090e1214171c1f20222523282c2d2e30313232333334333332312f2d2c2924201f1b17110c07010000000000000000000000000000000000040c13191d20262b2e3036393a3e41414547494a4b4c4c4d4d4d4d4c4b494846443f3d3a38342e2b261f19130c040000000000000000000000020d1720293036393b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b37322a22180e040000000000000000000000000001080d161c21272c2f35393a3e3f4446484a4b4c4d4d4d4d4c4b494745413c3a37312c28211a140e06000000000000000000000000000000000a131c232a2f32333333333333333333333333333333332d2c28231c150c131b23292e313233333333333333333333333333333333332f2e2b262018100600000000000a131c232a2f323333333333333333333333333333333333333333333333323231302e2d2b2822201f1d18120f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202a343c464e565e656c727b81878e92999fa2a9acafb5b9bdc4c7cbd1d6dae1e7e1dad6cec5bdb5aba1978d8074685e5246392d1c1106000013202c3946535f6c7986929facb9c5d2dfecf8ede4ddd6d1cecdcdcdcdcdcdcdcdcdcdcdcdcdcabdb0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13151618181818181818181818181818181514120e090300000000000000000911181d212425262626262626262626262626262626262626262626262626262626262626262626262626262626262626262621201d19130c050000000000000000000000000000000002080c151c23282c31363a3b3f414647494b4c4d4d4e4e4e4e4d4d4c4b4a494846454042403e3b3a38342e2f2d2b28231c140c0200000000000000000006101820262b2e2f32323232323232323232323232323232323232323232323232323232323232323232323231302d28221b1209000000000000000000000000000205060b1012131518181c1f2022232425262627272726252423201f1d1813120f0b0600000000000000000000000000000000000000000001080d11151b1f22252a2d2e313035393a3c3e3e3f40404040403f3e3d3b3a38342e2d2c28231d1a150d080100000000000000000000000000050e171e252a2d2e32323232323232323232323232323232323232323232323232323232323232323232323232322f2e2b262018100600000000000000000000000000000000050b10161c1d24292c2d2e34383a3b3d3e3f404040403f3e3c3a39352f2e2b26201c160e09030000000000000000000000000000000000010a12181e222526262626262626262626262626262626201f1c18120b030911181e222425262626262626262626262626262626262622211f1b150e06000000000000010a12181e222526262626262626262626262626262626262626262626262625242322201f1c171413100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323c464e585f686d777f868e93999fa3abadb3b9bbc0c7c9cfd3d7dce3e6e2dbd6cfcac2bcb4aba39992857a6d61564c41362a1e0a00000013202c3946535f6c7986929facb9c5d2dfecf8f0e9e2dcd8d5d4d3d3d3d3d3d3d3d3d3d3d3d3cabdb0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030709090c0c0c0c0c0c0c0c0c0c0c0c0c0c080705020000000000000000000000060c1115171819191919191919191919191919191919191919191919191919191919191919191919191919191919191919191413110d080200000000000000000000000000000000000000030a11171c1f262a2d2e3036393a3c3e4040414142414141403f3e3d3c3b3a38342e33312f2d2c282322201f1c17110a020000000000000000000000060e151b1f21222525252525252525252525252525252525252525252525252525252525252525252525252524211d17100900000000000000000000000000000000000003060709070c1013131516181819191a1a1a1a1917161413100c0705030000000000000000000000000000000000000000000000000001040a0f1315191d20212424292c2d2f31323233333433333231302e2d2b2823201f1c18120e090300000000000000000000000000000000050d14191e2021252525252525252525252525252525252525252525252525252525252525252525252525252522211f1b150e0600000000000000000000000000000000000000050b1013181d202023282b2d2f3031333333343333312f2d2c2924211f1b15100b05000000000000000000000000000000000000000000070d121618191919191919191919191919191919191312100c07000000060d1215181919191919191919191919191919191919191515120f0a04000000000000000000070d1216181919191919191919191919191919191919191919191919191818161513120f0b0606040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1925303b444e585f6a6f7a828b92989fa4abafb5babec5c7ccd2d5dae0e3e4e1dbd6d0cac5beb9b1aaa29992877d70685e52443b3025190e00000013202c3946535f6c7986929facb9c5d2dfecf8e7dfd7d0ccc8c7c7c7c7c7c7c7c7c7c7c7c7c7c7bdb0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d070705010000000000000000000000000000000000000000000000060c10141a1e2122252a2d2e3032333334353535343433333231302e2d2c2823262422201f1c17161312100b060000000000000000000000000000040a0f121515181818181818181818181818181818181818181818181818181818181818181818181818181715110c0600000000000000000000000000000000000000000000000000040607080a0b0c0c0d0d0d0d0d0c0b0907060400000000000000000000000000000000000000000000000000000000000000000306080d11131417191d202123242525262727272625252321201f1c171313100c07000000000000000000000000000000000000000002080e11141418181818181818181818181818181818181818181818181818181818181818181818181818181515120f0a040000000000000000000000000000000000000000000001070d111314171c1f20222325262627272626252321201d1915120f0a0400000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0706040000000000000106090b0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0908060300000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0c0c0b0a080606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2a36414c565f6a6f7c848f949fa2aaafb5bbc0c7cad0d4d7dde3e5e3e0d9d4cfcac5bfbab3ada79f9892877e716b60564c4132291e140800000013202c3946535f6c7986929facb9c5d2dfece9dfd5cdc5c0bcbababababababababababababababab0a3978a7d7064574a3d3124170a0000000000000000000003090d1012131313131313131313131313131313131306040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191e202123252627272828282727272625242322201f1c181917151312100c06070603000000000000000000000000000000000000030608090c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707080d11131416171819191a1a1a1a191816151312100b060604000000000000000000000000000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c090806030000000000000000000000000000000000000000000000000000010406060b101213151718191a1a1a1a1918161413110d0806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3846525e686f7c8591969fa6aeb4bbc0c7cbd1d6dbe0e3e4e2dcd7d3cec8c5beb9b4aea9a19e9590867e716c61594f443a3020170d0200000013202c3946535f6c7986929facb9c5d2dfece2d7cdc3bbb4afaeadadadadadadadadadadadadadadada3978a7d7064574a3d3124170a000000000000000000070e14191d1f202020202020202020202020202020202013110d070100000000000000000000000000000000000000000000000000000000030606090c0e0f111112121111100e0d0a070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080d1113141618191a1a1b1b1b1b1a1a19181716151313100c070b0807060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060708080808080707040100000000000000000000000000000000000000000000000000000000000000000000000000000000000001040707090b0b0c0d0d0d0d0d0c0b0a08070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607080a0b0c0d0d0d0d0c0b0907070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3841505a616e7a849197a1a8b0babfc5ccd2d7dce3e6e2dfd8d4d1cbc7c3bcb8b3adaaa29f97928b837c706c615a50473d32291e0e050000000013202c3946535f6c7986929facb9c5d2dfecdcd0c5bbb1a9a3a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0978a7d7064574a3d3124170a00000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c0400000000000000000000000000000000000000000000000004060b0f121316181a1c1d1e1e1f1e1e1d1b19171413110d08060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707090b0d0d0e0e0f0e0e0e0d0c0b0a090807060400000000000000000000000000000000000000000000000000000000000000000000000000000000040607080808070606030000000000000000000000000104060708080808070604010000000000000000000000000000000000000000000000020507080a0c060b0f12131414151515151413110d080a070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953616c75828f96a1a9b2bac2cad0d7dde3e4e1dad5d2cdc8c6bfbab9b1aca9a29e98928d857f786e6a615a50483e352c20170d000000000013202c3946535f6c7986929facb9c5d2dfecd8ccc0b4a99f979494949494949494949494949494949494948a7d7064574a3d3124170a0000000000000007111a232a31353839393939393939393939393939393939392c29241d160d04000000000000000000000000000000000000000000070c1013171c1f20222527292a2b2b2b2b2a2928262421201d1914120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607070c1012131415151413120f0b0607050200000406070a070d111314141515151413110d07010000000000000000000000000000000003050608090e12141517191a171b1f2021212222222121201d191a171413100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b65717e8a949ea8b2bbc4ccd6dbe2e5dfd8d4cfc9c6c2bcb8b4aeaca7a09d97928c86807a726c665f5750483e362d231a0e05000000000013202c3946535f6c7986929facb9c5d2dfecd5c8bcafa3978d878787878787878787878787878787878787877d7064574a3d3124170a000000000000030e19232c353c4145464646464646464646464646464646464639352f281f160c01000000000000000000000000000000000001070c12181c1f22282b2d2f323435373738383837363533312e2d2a25211e1a150f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000004060708080808070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b10121317181c1f2021222121201f1c171514120e090c101314171a181d20212122222221201d18130c0400000000000000000000000000060b0f121315181a1e212123252722272b2d2d2e2e2f2f2e2d2c29242724201f1d18120f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7884919da6b0bac4cdd6dee7e0d9d4cdc8c5beb9b8b1abaaa39f9b95908b85807a736d68605b544e453e362d241b110800000000000013202c3946535f6c7986929facb9c5d2dfe1d4c7baaea194877b7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786d6053463a2d20130700000000000009141f2a353e474d51535353535353535353535353535353535345403a31281d130700000000000000000000000000000000030b12181d23282c2d3338393c3f41424444454544444341403d3a3936302e2b261f1b160d08020000000000000000000000000000000000000000000000000000000000000000030608070c101313141515151413110d080706030000060606060606060606060606060302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c11171c1f202323282c2d2e2f2e2d2d2b282221211e1a14181d1f20242724292c2d2e2e2f2f2d2c29241d160d0400000000000000000000020a11171b1f202225252a2d2e3032342d3337393a3b3b3b3b3b3a39353033302d2c29241d1b160f0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d8995a0acb8c1ccd6dfe7ded5cec8c2bcb8b3adaba79f9d98928e89837e79736d68605d56504a423c332c241b12090000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665c5145382c1f130c0500000000000d1925313c4750585e5f6060606060606060606060606060605f514b433a2f24180d010000000000000000000000000000060d151d24292e34383a3f4446494b4d4f505151525151504e4c4a4746413b3a37312c272119130c050000000000000000000000000000000000000000000000000000000000030a0f131516181c1f202122222121201d19171312100c1313131313131313131313131313100f0d090500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c23282b2d302e34383a3b3b3b3a3938332d2e2d2a252024292c2d31342f35393a3b3b3b3b3a39352f281f160c010000000000000000090b141b22272b2d2f3131363a3b3d3f41423f444647474848484847454142403d3a38352f2c27211a150e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c556774818e9aa7b1bccad3dee8dfd5ccc3bdb8b1aba9a19e9a95908b86817d77716d67615d56524c443f382f2a211a1109000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6161616161616161616161616161616161605c544b403428211c17100800000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4035291d1104000000000000000000000000030a11171f272f35394045464a505355585a5c5d5e5e5e5e5d5c5b595754524c4847423c38322a251e160e070000000000000000000000000000000000000000000000000000060b10151b1f212223282c2d2e2e2f2e2d2c292423201f1c1720202020202020202020202020201c1c1915100a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c151d23282e34383a3d404044464748484746443f3f3b3a36312c2f35393a3d4143414547474848484745413a31281d13070000000000000009121b1d262d3337393b3e414246484a4c4d4f49505354545555555454524c4f4d4a4745403938322b262018100900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677784919eaab7c3cedde5e0d6ccc3bab2aca79f9d97928d88837f7a75706b65605d55524c45413a332d261d180f0e08010000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605454545454545454545454545454545453514b42392e302d28221a1208000000121f2b3845515e6a747979797979797979797979797979797976675d5145392c2013060000000000000000000000040c151c2328313940454b5153545b60626567686a6a6b6b6b6a69686664615e5655534d48433d363028201911090000000000000000000000000000000000000000000000020a11171c1f262b2e2f2e34383a3b3b3b3b3a39352f302d2c28232d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f171e272e34383f44464a4d4a51535455545453504a4c4846423b39394045474a4d504b51545455555554514b433a2f24180d01000000000006101b242d2f383f4446484b4d4d535456585a5c535b60606161626261605d565c5a5753514b48433d37312a221b120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8796a0acb9c5d2dee5dacfc4bab2a8a09e95908a85807b76726d6863605953514b46413a352f28222726241f1a130b0200000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534747474747474747474747474747474645403f3f3e3c39332c241a1005000013202c3946535f6c7986868686868686868686868686868686796d6053473a2d20140700000000000000000000040d161e262e343d434b51545c6064666c6f727475777778787777767473706d6866625f57544e46413a322b231b1209000000000000000000000000000000000000000000060c141c23282b32373b3c4040454647484848474541413d3a38342e39393939393939393939393939393635322c261e160c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000710192129303940454a5053565a545c6061626160605b545854534d4745474b5153575a5d555d6061616262605d554b4135291d110400000000000c17222d363e4149505355585a575e61636567696a656c6d6e6e6e6e6e6d686b696663605d55544f47433c342d241c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a8b2bdc8d4e1e1d5c9bdb2a8a0969189837e79736e6a65615d56544f4745403935302f3032333433302b241d140b00000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e362c22170c000013202c3946535f6c7986929393939393939393939393939386796d6053473a2d201407000000000000000000030c161f2830383f444f555d60666d7075797c7e808283848485848483817f7d7a77736e69626058524c443d352d241b1208000000000000000000000000000000000000000810181e262e34383c4347494c4b51535455555454524c4d4a46443f44464646464646464646464646464643413d3830281e140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e19222b333b434b51545c60636669666d6e6e6e6d6c666865615e57545253555d606467696b676d6e6e6e6e6d675d5145392c2013060000000005111d29343e4850535b6062646769696e707274757778797a7a7b7b7b7b7a79777573706d67636059534e463f362e251c120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afbcced9e5dfd2c5b9ada19691847d76716d66625f5854524c48443d393535393a3c3d3e40413f3c362f261d0d03000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60595959595959595959595959595959595959595959575550483e33281c11040013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a2d2014070000000000000000000b151e28313a424a505961676d72797d8285888b8d8f9091919191908f8e8c8a8784807b756f6a615e564f473e362d241a1107000000000000000000000000000000000008111a222a30383f44464e535559545c6061616261605d565a5653504a5153535353535353535353535353534f4e49423a30261b1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202b343d454d555c60666d70737678797a7b7b7a797775726e6966605d5f62676d70747678797a7a7b7b7b796d6054473a2d211407000000000815212d3945505a62656c6e717476787b7d7f808283858687878888888787868482807d79756f6b625f58514840372e241b0f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0bdc9d6e3ded1c4b8ab9e91847a706b64605c54534e4746414041414344414647484a4b4d4e4c4741382f1f150b010000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6666666666666666666666666666666666666666666664615a5045392d2114080013202c3946535f6c7986929facacacacacacacacacaca093867a6d6053473a2d201407000000000000000007121d27303a434b545c606b70797f848a8e9298989a9b9d9d9e9e9e9d9c9b999795918c88827c756d68605950483e362c23190d0400000000000000000000000000000008111a232c343c424a5053585f626669666d6e6e6e6e6d686a6763605c545e60606060606060606060606060605c5a544c42382c21150900000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323d464f575f676d72787d80838586878887878684817f7b77726d686a6e74797d8083858687878888887d7064574a3d3124170a000000000a1724303d4956626c71787b7e80838587898b8d8f9091929994949595949992918f8d8a85817c766f6a625b514940362d21170d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afbcd1dce7dacdc0b4a79a8d817468605953514b4a4a4b4b4c4c4d4e4f504c5254555658595a58524a4131271d12070000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7272727272727272727272727272727272727272727272716c6155493c3023170a0013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d6053473a2d20140700000000000000050f18232e39424b555d666d747d848c91979b9fa2aaa7a8aaaaababaaaaa9a7a6a7a09d99948f89817a706b615a50483e352b1f160c0100000000000000000000000000060f1a232c353e464e545c60646a6f737678797a7b7b7b7a787674706d66626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c69665e54493d3225190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303b444f5960696e797e84898d9092989495949992908e8b87837f7a74757b81858a8d909192999494958a7e7164574b3e3124180b000000000b1825313e4b5864717e85888b8d90929796989a9c9d9e9fa3aba1a1a1aba39f9e9c9998928e89827c726d635b51483e33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995abb5bfcbd7e3dbcec1b5a89b8e82756961595957575757575859595a5b5c5d565d616263656667645c5243392f24180c0000000013202c3946535f6c7986929facb9c5d2dfe5d9ccbfb2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574a3e3124170b0013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d6053473a2d201407000000000000030d17212834404b545d676d78808991969ea1a9abaeb3b3b5b6b7b7b8b7b7b6b4b2b1acaaa69e9c938e857d716c615a50473d31281e1308000000000000000000000000030e18212c353e474f585f666d71777c7f82848687888887878583807d79746f7779797979797979797979797979797670665a4e4135281c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c56606b6f7b838b9196999c9fa2aaa1aba39f9d9b9895908c868181878e92989a9c9e9fa3aba1988b7e7165584b3e3225180b000000000c1926323f4c5965727f8c97979a9c9fa2a9a5a7a8aaabacafb5aeaeaeb5aeacaaa8aaa29f9b948f867f736d635a50453b31251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8799a3aebbc7d3e0dfd2c5b8ac9f92867b706b676564646464646565666768696a6b686d6f707173746e64554b4035291d100400000013202c3946535f6c7986929facb9c5d2dfecdacdc0b4a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d6053473a2d20140700000000000009141f29333b45515c666d79828d929ea1a8adb2b8babec0c2c3c4c4c4c4c3c2c1bfbcb8b7b0aaa59e9792877e716c61594f433a2f24190d04000000000000000000000009151f2a333e474f59616a6f787e83888c8f91939a9495949792908d8985807b8486868686868686868686868686868276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202d3946525e686f7d8590959ea0a8a9abaeb4aeb5afacaaa8a7a09d98928d8e93999fa2aaa9abacaeb5a5988b7f7265584c3f3225190c000000000c1925323f4c5865727f8b98a9a7a9abadb3b2b3b5b6b8b9bbc0bbbbbbbfbbb9b7b5b4aeaca69f98928b7f736c62574d42362a1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7986929facb9c5d2dfe0d3c7baaea39891847d77747271707070717172737474767778797a7b7d7e808074675d5145392c1f130600000013202c3946535f6c7986929facb9c5d2dfecdcd0c4b8ada49c99999999999999999999999999999999999999999999998f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053473a2d2014070000000000020e1a25313b45505a606d78828f949da4adb2b9bec4c6cad0ced0d0d1d1d1d0cfcecec8c5c1bbb7afa9a19992887e716b60564c41352920150a00000000000000000000020e1a26313c454f59616c707c838b9095999c9e9fa4aca1a9a29f9d9a97928d8888939393939393939393939393938f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000008141e2c38444f59616e7a859197a0a7acb2b6b8babebbc0bbb9b7b4b1acaaa29f9a9b9fa4abaeb4b6b8b9bbb2a5998c7f7266594c3f3326190c000000000b1825323e4b5865717e8b98a4b1b6b8babebec0c2c3c4c5c7cbd1c8d1cbc7c5c4c2bfbab8b0aaa39f918b7e71695e53463b3025190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b667783909daab6c3cfdbe3d6cbbfb4aaa196918984817f7e7d7d7d7e7e7f7f8081828384868788898b8c867a6d6053473a2d20140700000013202c3946535f6c7986929facb9c5d2dfece1d5cabfb6ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000000000005121e2a36424d57626c75818e949fa6aeb9bdc4c9cfd3d6dbdbdbd6d4d3d5d8dcdad9d4d1ccc7c1bbb3aba39a92877d6f685d52453c32261b0f0300000000000000000006121e2b37424d57616b707e8690959da0a7a9abacafb6aeb3adaba9a9a19e9a9a939aa49f9f9f9f9f9f9f9f9f9f9c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303b4854606b76828f97a1a9b1b9bdc3c5c6cad0cbc7c5c3c1bcb8b4aeaca7a8acafb5babfc3c4c5bfb3a6998c807366594d4033261a0d000000000b1825313e4b5864717e8b97a4b1bec5c6cad0cdcfd0d1d2d3d7dcd4dcd7d3d2d1d0cac6c2bcb4aea39f92867b6e61564d42362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a546774818d9aa9b3becad6e2dcd0c6bcb2a8a19e96918e8c8a8a8a8a8a8b8c8c8d8e8f9091929995969894887b6e6155483b2e22150800000013202c3946535f6c7986929facb9c5d2dfece6dbd1c8bfb8b4b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000714212d3a46535e69717e8b939ea6b0b8c0c9cfd5dadcd7d3d2cec9c7c7c8ccd1d2d5daded7d3cdc5bdb5aca39991847a6d60584e43372b2015090000000000000000040f19222d3a47535f69707d879298a0a7acb1b5b8b9bbc0bbbebab8b6b3adabaca49fa4acb6acacacacacacacaca99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c5663707d89949fa9b3bbc3c9ced2d3d6d4d2d1cccacec8c6bfbab8b4b4b9bbc0c7cad0d1cdc0b3a69a8d8073675a4d4034271a0d000000000b1724313e4a5764717d8a97a4b0bdcad3d6d8d4d2d2d1d0d0d0d0d0d1d2d3d7dcdbd6d3cec6bfbaaea2988e8174695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3d4a5763707d8a97a2adbac5d0dbe2d8cec4bab2aca8a09e9a9897979797979898999a9b9c9d9e9fa3aba3a296897c6f6356493c3023160900000013202c3946535f6c7986929facb9c5d2dfecede3dad1cac4c0bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000006121f2b37434e58616e7b86929fa5afb8c2cad5dae1d9d1cbc7c5c1bcbbbabcbfc4c5c9cfd6dfdfd6cfc6beb4aba1968e81746a5f53473c31261a0e00000000000000000a16212d3944505a616e7b859299a3aab1b8bcc2c4c6c8ccd0cac6c5c3beb9b8b6afacafb6beb9b9b9b9b9b9b9b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e6875828f9ba6b0bbc4cdd5d9ded5cec8c5c4bfbdbebfc1c3c4c5c0c1c6c7ccd2d6dbdacdc0b4a79a8d8174675a4e4134271b0e000000000a1724313d4a5764707d8a97a3b0bdcacad2ccc8c6c5c4c3c3c3c3c3c4c5c7cbd1d9e1dfd8d0cabfb4aa9f92867b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d3a4653606d7985929faab4becad6dde0d6ccc4bdb9b2acaaa7a5a4a3a3a3a4a4a5a6a7a7a9aaabacaeb4b0a4978a7e7164574b3e3124180b00000013202c3946535f6c7986929facb9c5d2dfe5e5e5e3dbd5d0cdccccccccccccccccccccccccccccccccccccccc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000000000815212e3a47535f6a74818e98a2aeb7c1cad4dcdfd7cfc7c0bbb9b4b0aeadafb2b8b9bdc4ccd3dce1d8d0c6bdb2a89f93877c6f62574e42372b1c1106000000000000030f1b27323c4955616c76828f98a2abb4bcc3c8ced1d2d4d8dbd6d3d2cfc9c6c5c0bbb9bbc0c7d0c6c6c6c6c6c2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a86939facb9c2cdd6dfdfd5ccc3bdb9b7b2b1b1b2b4b6b8b9bec4cdd4d7dde3e7dacec1b4a79b8e8174685b4e4135281b0e000000000a1723303d4a5663707d8996a3b0bcbfbebcc0bbb9b8b7b7b6b6b6b7b7b9bbc0c7cfd1d9e2dbd0c5bbafa3998b7f7265584c3f2f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6673808d98a2aebac1cbd4ddded6cec9c4bdb9b7b4b2b1b0b0b0b1b1b2b2b3b4b5b6b7b9babfb2a5988c7f7265594c3f3226190c00000013202c3946535f6c7986929facb9c5d2d9d9d9d9d9d9d9d9d9d9d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8cfc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000004111d2935414c56626f7c87939faab4bec9d3dce2d7cdc5bdb5afaca8a3a1a0a2a5abadb2bac2cad3dde2d8cfc4bbafa49a8f82756a5f5347382e23170c00000000000007131f2c38434e5864717d8a949faab3bdc6ced4d9dedfe0dbd6d3d2d0cfcecdd2ccc8c6c8ccd2d9d2d2d2d2cfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a99a4afbbc7d4dfe1d6cdc3bab2acaaa5a4a4a6a7a9abadb2bbc4cfdae6eee3d7cbbfb5ab9b8e8275685b4f4235281c0f000000000a1623303d495663707c8996a3afb3b2b1afb6afacababaaaaa9a9aaabacafb5bdbfc7d1dbe2d7cbc0b5ab9c8f827569564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b54616d7a85929fa6b0b9c2cbd4d9dfdad5cec9c5c4c1bfbdbdbdbdbdbebfbfc0c1c2c3c4c5c7c0b3a69a8d8073675a4d4034271a0d01000013202c3946535f6c7986929facb9c5ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000713202c3945525d6874818e99a4afbcc5d0dbe4d9d0c5bbb3aba39f9b96949495999ea1a8b0b8c2cbd5dfe1d8ccc0b6ac9e94887b6e62544a3f34281c100300000000000915222e3b4854606a7783909da6b0bcc5cfd8e0e4e0d9d4d0cac6c5c4c2c1c1c1c3c4c5c7cbd1d9e1ebdfdccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aabb5c0ccd7e6dacfc4bbb2a8a09e999798999b9c9ea1a9b2bec9d5e1ede0d3c7bbaea3998f8275695c4f4236291c0f00000000091623303c4956636f7c8996a2a8a7a5a4a3aca49f9f9e9d9d9d9d9d9e9fa3abadb5bfcad5e0dcd1c5b8ab9e928578685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3946525e68727f8b949ea7b1b9c0c8ced4d8dfd9d5d2d1cdcbcacacacacacbcbcccdcecfd0d1d2cec1b4a89b8e8175685b4e4235281b0800000013202c3946535f6c7986929facb9bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000714212d3a4754606d7a86929fabb5c0ced7e2ddd2c7beb3a9a299928e898887898c91969fa6b0b9c3cdd9e4ddd2c7beb0a69a8d8073665c5044382c1f120600000000000916232f3c4956626f7c8995a0acb8c2ced7e1e7ded5cec8c5bfbab8b7b6b4b4b5b6b7b9bbc0c7cfd9e3e8dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9ca9b6c2d2dde1d5c9beb3a9a096918c8a8b8c8e909197a1adb9c6d2dfecdfd2c5b9ac9f92877f7265584c3f3225190c000000000916222f3c4955626f7c88959d9b9a999796959a93929190909090909192999ca3adb8c4d0dcdfd2c6b9ada197877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2a36414c56606c78828f959fa7aeb8bdc3c8cdd2d3d7dcd9dad8d7d6d6d6d7dcd7d3d2d0ced0cbc7c5c2b6a99c8f8376695c50432f24190d01000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000004111d2935404b5565727e8b98a2aebdc7d2e0e4d8ccc0b6aca2979287817d7b7a7c7f848f949fa7b1bcc8d4dfe4d9d0c1b8ab9e9285796d6053463a2d2013070000000006121f2b37434e586774818d9aa7b1bccad4e0e8ded5ccc3bdb9b4aeacaaa9a8a7a8a9aaacafb5bdc7d1dce8dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919daab7c4d0dddfd2c6b9ada19791847f7e7e7f818385919eabb8c4d1dee7dacdc0b4a79a8d81746d62564a3e3125180b000000000915222f3c4855626f7b8892908f8d8c8b898887868584848383838484868c919ca8b4c0cdd9e2d5c9beb3a995887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303a44505b666d7a8390959da4acb1b8bcc3c5c7cbd1cdcdcececdcdccccd1cbc7c5c4c1bfbfbab8b6b4aa9e9184776b554c4135291d1104000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000613202c3945515d6776828f9caab4bfd0d9e3e0d4c8bbafa49a92857c75706e6d6f7279828f95a0acb8c2cdd8e4dfd2c6b9ada197897c706356493d2f24180d010000000815212e3a47535f6a7884919eabb8c3cddee6e0d6ccc3bab2acaaa29f9d9c9b9a9b9d9d9fa3abb5c0cbd7e3dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3845525e6b7885919eabb8c4d1deded1c4b8ab9e91857a7271717374767e8a97a4b1bdcad7e4d8cbbeb1a5988b7e72655b51463a2e221609000000000815222e3b4855616e7b86858382807f7e7c7b7a797878777776767778787f8c99a5b2bfccd8e6dacfbcafa295897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28333f4a545d686d7a838d929da0a8abb1b6b9bbbfbfc0c1c1c1c1c0c0bfbdc0bbb9b7b5b3b4aeacaaa7a59f928579675d5145392c201306000013202c3946535f6c798692999999999999999999999999999999999999999999999999999999999999999999999999998f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000714202d3a4753606d7a86929facb9c5d0dfebdfd2c6b9ac9f93887d6f6a63616162676d7883909da7b1bcc8d4e0e2d6cabeb3a99a8d807367554b4035291d10040000000915222f3c4855626f7b8896a1adb9c5d2dfe5dacec4bab2a8a09e9892918f8e8e8e90919299a3afbbc7d4e0dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b657986929facb9c5d2dfdacec1b4a79b8e81746864656668717e8a97a4b1bdcad7e3d6cabdb0a3978a7d7064574a3f34291e1206000000000713202d3a4653606d787a787775747271706f6d6d6d6f727476787a7d8085929eabb8c5d1dee2d5c8bcafa295897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b17222d38424c565d686d79808991959d9fa7a9acaeb5b2b3b4b4b4b4b3b3b2b1b5afacaaa8a6aaa39f9d9b989696877a6d6054473a2d211407000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000a1724303d4a5763707d8a99a3aebac7d3e0e1d4c8bdb2a89b8e81746b60585554555d66707d89959fabb8c4d1dde6dacfc3b7aa9d908377675d5145392c2013060000000b1825323e4b5865717e8b98a9b2bdc9d5e1e1d5c9bdb2a8a096918a858483818182838387929facb9c5d2dfdccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c798698a3aebac7d3e0dacdc1b4a79a8e8174675b585964717e8a97a4b1bdcad7e2d5c9bcafa296897c6f6356493c3023160d010000000006121f2b3844505c666d6d676a686766676d7074777a7c7e818385878a8d9297a1adb9c6d2dfe3d6cbbfb4aa95887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3a434c565d676d747d848a9095999c9fa3aba5a6a7a7a8a7a7a6a5a4aba39f9d9b99979892908e8b8987847b6e6154483b2e21150800000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574a3e3124170b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000d1a2633404d596673808c99abb4bfcbd7e3ded2c5b8aca096887c6f62594f48474b54606b7683909da9b6c3d1dce7dfd2c5b9ac9f92867a6d6053473a2d2014070000010e1b2834414e5b6774818e9aa7b4c1cfdae6ded2c5b9aca19691847d797776757475767885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b657986929facb9c5d2dfddd0c3b6aa9d9083776d64626164717e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f231609000000000003101c28343f4a545c60605d5e616a6f74797d818386898b8d909297969a9ea1a9b3becad6e2e0d3c7baaea398877a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28313a444c555c606b70787e83888c90929997989a9a9b9b9a9a999997969992918e8c8a888683817f7c7a786e695e52463a2d20140700000c1825323e4b57636d72737373737373737373737373737373737373737373737373737373737373737373737373737373716c6155493d3023170a0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070004111d2935414c566976828f9ca9b5c2d1dce7ddd1c4b7aa9e9184776a5f53473d3a424f5966727f8c99abb5bfcbd7e3e0d4c7bbafa399897c6f6356493c30231609000004101c2934404b55697683909ca9b6c3cfdce3d7cbc0b5ab9e91847a706d66696867686c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f495e6b7885919eabb8c4d1deddd1c4b8aba0958b7f75716f6e6d717e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f2316090000000000000b17232e38424a50535960696e757c81858a8d909299989a9c9ea2a9a6abadb3bbc5cfdae6dfd2c5b8ac9f9285796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b161f28323a434b515960666d71777b808386888a8c8d8e8e8e8e8d8d8c8a8988868482807d7b79777472706d68615e574d42362a1e120500000a16222f3a46515b636666666666666666666666666666666666666666666666666666666666666666666666666666666664615a5045392d2114080013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000713202c3945525d687885929eabb8c5d1dee7dacdc1b4a79a8e817467584e4335303d4956626f7c8999a3aebbc7d3e0e3d7cbc0b5ab988b7f7265584c3f3225190c000006131f2c3845515c677885919eabb8c4d1dee0d3c7bbafa3998b7e7168605c545b5b5f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d44505d6a7783909daab6c3d1dce0d4c8bcb1a79b918b827e7c7b7a787e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f23160900000000000006111c26303b454f59616b707b81878e92979a9d9fa3aba7a9abadb3b3b8b9bec5cdd7e1e7dcd0c3b6a99d908376665c5044382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d162028303940454f545c60646a6f7376797c7e7f808181818180807f7e7c7b79777573716e6d66686563615e56524d453b30251a0e02000006121e2a353f49515759595959595959595959595959595959595959595959595959595959595959595959595959595959575550483e33281d11050013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000714212d3a4754606d7a8797a2adb9c6d2dfe4d7cbbeb1a4988b7e7165584b3e312d3a4653606d7986929facb9c5d2dfe8dcd1c0b3a79a8d8074675a4d4134271a0600000714202d3a4753606d798697a1adb9c6d2dfdfd2c5b9ac9f92867a6d6056514a4e525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000061b2835414e5b6874818e9babb5bfcbd7e2d9cdc3b9aca39b938f8b8988878686929facb8c5d2dfe2d5c8bcafa295897c6f6256493c2f23160900000000000005121e2a36424d57616b707d858e93999fa2a9aaacafb5b4b6b8b9bec0c5c6cacfd7dfe3dcd4c8bdb2a89a8d817467544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e272e343d424a5053585f6266676d6f7172737474757474737271706e6d6668666462605c54585654524c46423b33291f1409000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e362c22170c000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000916232f3c4956626f7c8995a9b3becad6e2e3d7cbc0b5ab96897c6f6356493c302c3845515c667784919daab7c4d0dde8dbcfc2b5a89c8f8275695c4f422e23170c00000815212e3b4854616e7b8794a9b3bec9d5e1ddd0c3b6aa9d908377675d51444045525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b99a3aebbc6d0d8dfd5cbbeb5aca59e9b97959499929298a2aebac6d3dfe2d5c8bcafa295897c6f6256493c2f2316090000000000000714212d3a46535e69707d8792979fa4abadb3b6b9bbc0c0c3c5c6cacfd1d2d6dae0dcd7d1cbc1b8aca096897c706356493d2e23170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c151d232830383f44464e5355555c606264656767686867676666646361605c5459575553504a4c494746413a36302921170d030000000007121c252e353a3e3f4040404040404040404040404040404040404040404040404040404040404040404040404040403e3d39332c241a1005000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000b1824313e4b5764717e8a97a4b1bdcfdbe6e0d4c7bbafa399877a6e6154473b2e2834404b546975828f9ca8b5c2cfdbe8ddd0c4b7aa9d9184776a544a3f34281c1003000916222f3c4955626f7c8895a2afbbcfdae6dbcec1b5a89b8e827568554b403445525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86929faab4bfc6cfd2d6d0c7beb7afaaa8a4a2aba39f9fa2aab4bfcad6e2e2d5c8bcafa295897c6f6256493c2f231609000000000005121e2a36424d57616e7b859299a1a9afb5babec3c5c7cbd1cfd1d2d6dbdedddcd7d3d1cbc6bfbbafa59d9184776b6054483b2f1c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181e262e34383c4347484b51535557595a5b5b5b5b5a5a5957565553514a4d4a4846443f3f3d3a3935302a251f170f050000000000000a131c232a2f323333333333333333333333333333333333333333333333333333333333333333333333333333333331302d28221a120800000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000c1925323f4c5865727f8b98a5b2becbd8e5dfd2c5b9ac9f9286796d6053463a2d232e414e5b6774818e9aa7b4c1cddae7ded2c5b8ab9f928578665c5044382c1f120600091623303c4956636f7c8996a2afbcc9d5e2d9cdc0b3a69a8d8073675a4d402f45525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e6875818e98a2aeb4bcc2c6cacfd0c9c1bbb6b5b1afb5afacacaeb4bcc6d0dbe7e2d5c8bcafa295897c6f6256493c2f23160900000000000714202d3a46525e6975828e97a2abb3bbc0c7cad0d2d3d7dcdcdbdcd7d3d2d0d1cbc7c5c0bbb5aea59e938a7e7164594f44382c200a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c141c23282b31373a3c404546484b4c4d4e4e4e4e4d4d4c4b4948464440403e3b3a38342e302e2d29251e1a140d0500000000000000010a12181e2225262626262626262626262626262626262626262626262626262626262626262626262626262626262423211d1710080000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000d1a2633404d596673808c99a6b3bfccd9e6ded1c5b8ab9e928578665c5044382b2733404d5a6673808d99a6b3c0ccd9e6dfd2c6b9ac9f9386796d6053463a2d201307000a1723303d4a5663707d8996a3b0bcc9d6e3d9ccbfb3a6998c807366594d403945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c56616e7b86929fa3aab0b8b9bec1c3c5c6c6c3c2bebcc0bbb9b8babfc6ced7e2ede2d5c8bcafa295897c6f6256493c2f23160900000000000815212e3b4854616e7b87929fa9b3bdc5ccd2d6dbdfdad6d2d1ced1cbc7c5c3c1c0bbb9b5afaba39f938e81756c6155473d32271b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f262b2e2e34383a3c3e3f404141424141403f3e3d3b3a38342e312f2d2b28232321201d19130e090300000000000000000000070d12161819191919191919191919191919191919191919191919191919191919191919191919191919191919171714110c05000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000e1b2734414e5a6774818d9aa7b4c0cddae7ddd0c4b7aa9d9184776a544a3f342826323f4c5965727f8c98a5b2bfcbd8e5e0d4c8bbafa49a877a6e6154473b2e211408000a1724303d4a5763707d8a96a3b0bdc9d6e3d8ccbfb2a5998c7f7266594c3f3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a46535e69717e8a92989fa6abadb3b5b7b8babfbcbdbdbebfbfc0c2c4c7ccd4dce6f0e2d5c8bcafa295897c6f6256493c2f23160900000000030f1b27333f495366737f8c99a3afbbc5cfd7dde3dfd7cfcac6c5c1bfbfbab9b7b4b5afacaba39f99928d81796d605a5044352b21160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b10151a1f2123282c2d2f3132343435353434333331302e2d2c28232422201f1c17161413110d08020000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a08050000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1b2835424e5b6875818e9ba8b4c1cedbe7ddd0c3b6aa9d9083776a5d50442e2325323f4b5865727e8b98a5b1becbd8e4e4d8ccc0b6ac94887b6e6155483b2e221508000a1724303d4a5763707d8a96a3b0bdc9d6e3d8ccbfb2a5998c7f7266594c3f3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2a36424d57616c717e868f949a9ea2a9a8aaacaeb4afb0b1b1b2b3b3b6b7bbc2cad4dee9e2d5c8bcafa295897c6f6256493c2f2316090000000005121f2b3744505b6576828f9cabb5c0cdd7e1e8dad2cdc5beb9b8b5b2b4aeacaaa8aba39f9d99928f8780786d675c51483e3323190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f1215181c1f202224262728282828272726242322201f1c1817151312100b06070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2935424f5c6875828f9ba8b5c2cedbe8dccfc3b6a99c908376695d5043362a25313e4b5864717e8b97a4b1becad7e4e8ddd2bbaea295887b6f6255483c2f221509000a1723303d4a5663707d8996a3b0bcc9d6e3d9ccbfb2a6998c7f7366594c403945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b45505a626c717c82898e9297989b9d9fa2aaa2a3a4a4a5a6a7a9abb0b8c2ccd8e3e2d5c8bcafa295897c6f6256493c2f231609000000000613202d394653606c7985929fabb8c5d1dee9dcd2c8c0bbb3adaba8a5aaa39f9d9b999992908c86827b736d665c554b40362c22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070c1013131518191a1b1b1b1b1a1a191816151312100c0708070603000000000000000000000000000000000000000000000000000000000106090b0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a0a0804000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2936424f5c6975828f9ca8b5c2cfdbe8dccfc2b6a99c8f8376695c5043362924313e4b5764717e8a97a4b1bdcad7e4e2d5c8bbafa295887c6f6255493c2f22160900091623303c4956636f7c8996a2afbcc9d5e2d9ccc0b3a6998d8073665a4d403945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333e48505a626a6e767c8185898c8e909298959696979898999a9c9fa6b0bbc7d3dfe2d5c8bcafa295897c6f6256493c2f231609000000000814212e3b4754616e7a8797a2adbac6d3dfe1d5cac0b6aea9a19e9b98969892908e8c8986837f7b756e69605c545550473e33281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090b0c0d0e0e0f0e0e0d0c0b0a08070604000000000000000000000000000000000000000000000000000000000000000000060d121618191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171614100b0500000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cfdce8dccfc2b6a99c8f8376695c5043362924313e4a5764717d8a97a4b0bdcad7e3e2d5c8bcafa295897c6f6256493c2f231609000916222f3c4955626f7c8895a2afbbd0dbe6dacdc1b4a79a8e8174675b4e413045525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212c363e4850585f626a6f74797c7f8284858788898a8a8b8c8c8d8f949fabb7c4d0dde2d5c8bcafa295897c6f6256493c2f231609000000000915222f3c4855626f7b8895a9b3becad6e2ddd1c5b9aea49c97928e8c89878684817f7d7a76726e686260616364615a5044392d201408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e222425282828282828282828282828282828282828282828282828282423201c171008000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cfdce8dccfc2b6a99c8f8376695c5043362924313e4a5764717d8a97a4b0bdcad7e3e2d5c8bcafa295897c6f6256493c2f231609000815212e3b4854616e7b8794a9b3becad6e2dccfc2b5a99c8f827669564d413645525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1a242d363e464e53586062666d6f727577797a7b7c7d7e7e7f8080828f9ca9b6c2cfdce2d5c8bcafa295897c6f6256493c2f23160900000000091623303c4956636f7c8996a2afbcd0dbe6dacec1b5a89c928d85827f7d7b79777573706d67676869666d6e6f706c6155493c3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090d10121313131313131313131313131313131313060401000005080a0b131313131313131313131313131313131313131313131313130c0b090601000000000000000009131b23292e31323535353535353535353535353535353535353535353535353531302d28221a12080000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2936424f5c6975828f9ca8b5c2cfdbe8dccfc2b6a99c8f8376695c5043362924313e4b5764717e8a97a4b1bdcad7e4e2d5c8bbafa295887c6f6255493c2f221609000714202d3a4753606d7a8697a2adbac6d3dfded1c4b7ab9e918478685e52463e45525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27323d474f54565858545c606365686a686d6e6f7071717273747e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f231609000000000a1723303d4a5663707d8996a3b0bcc9d6e3d9ccc0b3a6998d80787572706e6c6d6e6f70717273757678797b7c7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e14191d1f202020202020202020202020202020202013110d070c1114171720202020202020202020202020202020202020202020202020191815120d0600000000000006111b252d343a3e3f414141414141414141414141414141414141414141414141413d3c39332c241a100500000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2935424f5c6875828f9ba8b5c2cedbe8dccfc3b6a99c908376695d5043362a25313e4b5864717e8b97a4b1becad7e4e1d5c8bbaea295887b6f6255483c2f221509000613202c3945515d677885929fabb8c5d2deded2c5b9aca196877a6e61554b4b4c525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f596063656464646363626261616162636364656566717e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f231609000000000a1623303d495663707c8996a3afbccfdae5d9cdc0b3a69a8d807b7a79797979797a7b7c7e7f8082838486878984786b5e5145382b1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d1813171d2123242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2524221e18110901000000010d18232d373f464a4c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4a49443e362c22170b00000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1b2835424e5b6875818e9ba8b4c1cedbe7ddd0c3b6aa9d9083776a5d50442e2325323f4b5865727e8b98a5b1becbd8e4e4d8ccc0b6ac94887b6e6155483b2e2215080004101d2935404b556a7783909daab6c3d0dde1d5c9bdb2a8988b7f72675d5558585a5f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b707171717170706f6e6e6e6e6d6d6d666c686d727f8b98a5b2becbd8e2d5c8bbafa295887c6f6255493c2f221609000000000916222f3c4955626f7c8895a8b2bdc9d5e1dacec1b5a89d928d888686858586868788898a8c8d8e909192999185786b5e5245382b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a232a31353839393939393939393939393939393939392c29241d22282d30313939393939393939393939393939393939393939393939393932312e29231b130900000006121e29343f495156585b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b575550483e33281c1004000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000e1b2734414e5a6774818d9aa7b4c0cddae7ddd1c4b7aa9e9184776b544a3f342826323f4c5965727f8c98a5b2bfcbd8e5e0d4c8bbafa49a877a6d6154473a2e21140700010d18242f424e5b6875818e9ba8b4c1d0dbe5dacec4b7aa9e9184796d676464656668657885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d7e7e7e7d7d7c7c7b7b7b7a7a7a797979797a7d84919eaab7c4d1dde2d6cabfb4aa95887b6e6255483b2f221508000000000714212d3a4754606d7a8796a1adb9c5d2dfddd1c5b9aea49d9a9599939292929994959697989a9b9c9e9f9e9285786b5f5245382c1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e19232c353c4145464646464646464646464646464646464639352f282c33393d3e464646464646464646464646464646464646464646464646463f3e3a342d251b110600000916222e3a46515b62656868686868686868686868686868686868686868686868686864615a5044392d201408000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000d1a2633404d596673808c99a6b3bfccd9e6ded1c5b8ab9e928578665c5044382b2733404d5a6673808d99a6b3c0ccd9e6dfd2c6b9ac9f9386796d6053463a2d2013070000071926323f4c5965727f8c98aab4bfcad6e2ded2c5b9aca0968e8179727171727375767785929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c2936434f5c6976828b8b8a8a8a89898888878787868686868687899196a0acb9c5d2dedfd3c6baaea298877a6d6054473a2d211407000000000713202c3945525d687884919eabb7c4ced9e1d6cac0b6aea8a6aba49f9f9f9fa3aba2a3a4a5a6a8a9abab9f9285786c5f5245392c1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2a353e474d51535353535353535353535353535353535345403a31363e45494a535353535353535353535353535353535353535353535353534c4a463f372d23180d01000b1824313e4a56626d7274747474747474747474747474747474747474747474747474706c6155493c3023160a000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000c1925323f4c5865727f8b98a5b2becbd8e5dfd2c5b9ac9f9286796d6053463a2d2834414e5b6774818e9aa7b4c1cddae7ded2c5b8ab9f928578665c5044382b1f120600000a1623303d495663707c8998a2aebac7d3e0e1d5c9bdb2a89e938e847f7e7e7f808183868997a2adbac6d3dfdccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f9797979696959594949493939399929399969ea0a8b2bdc9d5e1dfd2c5b8ac9f928579685d5245392c2013070000000004111d2935414c566875818e9ba8b2bdc9d5dedcd2c8c0b9b5b3b5afacacacacaeb5aeafb1b2b3b5b6b7ab9f9285786c5f5245392c1f1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925313c4750585e5f6060606060606060606060606060605f514b433a3e4850555760606060606060606060606060606060606060606060606060585651493f34291e1206000c1925323f4c5865727f818181818181818181818181818181818181818181818181817e7064574a3d3124170a000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000b1724313e4a5764717d8a97a4b0bdcfdae6e0d4c7bbafa399877a6e6154473b2e2834404b546975828f9ca8b5c2cfdbe8ddd0c4b7aa9d9184776a544a3f34281c100300000714202d3a4753606d7986929facb8c5d0dbe5d9cec4baafa59e96918c8a8b8b8d8e909298a2a9b3becad6e2dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2a3743505d6a7683909da4a4a3a3a2a1a1a1a1a0a0a0a39f9fa4abaaacb2bac4ced9e5dcd0c3b6a99d9083766a564c4135291d110400000000010d1924303d4a5763707d8a96a0acb9c1ccd8dddad2cac5c1c0c0bbb9b8b8b9bbbfbbbcbdbfc0c1c3b8ac9f9285796c5f52462d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4045505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e221509000f1c2935424f5c6875828e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000916232f3c4956626f7c8995a9b3becad6e2e3d7cbc0b5ab96897c6f6356493c302c3845515c667784919daab7c4d0dde8dbcfc2b5a89c8f8275695c4f422e23170b00000006131f2c3845515c6776828f9caab4bfcad6e2e0d6ccc1b7afa8a09d99979798999b9d9fa2aab3bcc5d0dbe6dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daab0b0afafaeaeaeadadadb5aeacacafb5b7b9bdc4ccd6e0e0d5c9bdb2a89a8d8073675a4d402f24190d0100000000000813202d3a4653606d7984919ea6b0bac3ccd2d9e0d6d1ced2ccc7c6c5c5c5c7cbd1c9cacbcdcec5b9ac9f9286796c5f493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845515e6a747979797979797979797979797979797976675d51454955616c7179797979797979797979797979797979797979797979797979726d62564a3e3124180b000f1c2935424f5c6875828f9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000714212d3a4754606d7a8797a1adb9c6d2dfe8dcd1beb1a4988b7e7165584b3e312d3a4653606d7986929facb9c5d2dfe6dacdc0b3a79a8d8074675a4d4134271a0600000004101c2934404b5565717e8b98a2aebac6d0dbe7ded3c9c1bab2acaaa5a4a4a5a6a8a9acaeb4bcc5ced7e1e8dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b7784919eaab7bdbcbcbbbbbababab9bfbbb9b9bbc0c4c5c9ced6dedfd7cec5b9ada196897d7063564a3d3023170800000000000006121f2c3844505c66717e8b949ea8b1bbc0c7d0d4d7dcddddd7d4d2d2d2d2d3d7dcdad5d2d1cec6b9ac9f938679655b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986868686868686868686868686868686796d6053474a5764717e868686868686868686868686868686868686868686868686867f7265584c3f3225190c000f1c2935424f5c6875828f9ba7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000713202c3945525d687885929eabb8c5d1dee7dacdc0b4a79a8d817467584e4337303c4955626f7c8899a3aebbc7d3e0e3d7cbc0b5ab988b7f7265584c3f3225190c000000000c18232f3a4753606d7a85929faab4bfcad6dde8dbd3ccc3bdb8b7b2b1b1b2b3b4b6b8babfc5ced7e0e9e8dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2b3845515e6b7884919eabb7c4c9c8c8c7c7c7c6d1cbc7c5c6c7ccd2d2d5d9dcd7d3cdc5bcb1a79e9184786d6053463a2d20130700000000000003101c28343f4a54616c75828f96a0a7afb6bec3c7cbd1d1d1d2d4d6d3d2d1cfcecccec9c5c4c2bfbbafa49986796c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79869293939393939393939393939393867a6d6053474a546773808d93939393939393939393939393939393939393939393938b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070004111d2935414c566976828f9ca9b5c2d1dce7ddd0c4b7aa9d9184776a5f53473d3a424f5965727f8c98abb5bfcbd7e3e0d3c7bbafa399897c6f6356493c30231609000000000713202c3945515d6773808d98a2aebac2cbd7dce3ded5cec8c5c4bfbdbebec0c1c3c5c6cad0d7e0e9f2e8dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2c3845525f6b7885929eabb8c1c4c6c7ccd2ced0d1d2d3d2d2d4d7d7d4d2d1d1cbc7c1bbb3aaa0958b7f72665c5044382b1f1206000000000000000c17232e3842505a606d7a8490959fa4acb2b9bbc0c2c4c5c5c7cac7c5c4c3c1c0bebdb9b7b5b2b2ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d605347505c667683909c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1bfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700010d192430404d596673808c99abb4bfcbd7e3ded1c5b8aca096887b6e62584e47474b54606b7683909da9b6c3d1dce7dfd2c5b9ac9f92867a6d6053473a2d2014070000000004111d2935404b55616e7a86929fa6b0b9c2cbd1d7dcdfd9d4d1d0cccacacbccced0d2d2d4d8dde4ebf4e8dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c7985929facb2b4b7b9bbc0c0c1c3c4c6c7ccd2c8d1cbc7c5c4c2bfbab9b0a9a1989183796d60544a3f34281c10030000000000000006111c26303e45525d686e7b838d939aa0a8acafb5b5b7b8b9bbbfbab8b7b6b5b3b1b2acaba8a6a9a19e93867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facacacacacacacacacaca093867a6d60534753606d7985929facacacacacacacacacacacacacacacacacacacaca5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c2cececececececececececececececcbfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000081724303d4a5763707d8a99a3aebac7d3e0e1d4c8bdb2a89b8e81746a60585454555c666f7c89959fabb7c4d1e3e9ddd0c3b6aa9d908377675d5145382c1f130600000000010d18242f3a46525e68727f8b949ea7b0bbc0c7cbd1d2d3d7dbd6d2d1d0ced1cbc7c5c6c8ccd2d9e2ebe8dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c667986939ea1a8a8aaacafb5b3b5b6b8b9bbc0babbbbc0bbb9b7b6b4aeaca69e9792867c6f665c5142382e23170b0000000000000000000a151e2935414c565e696e79818891969b9fa3aba9aaabacafb4aeacaba9a8a6a4a8a19e9b999696918f867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d60534855626f7c8898a2aebab9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c2ced8d8d8d8d8d8d8d8d8d8d8d8d8ccbfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000714202d3a4753606d7a86929facb9c5d0dbe5d9cec3b9ac9f93887c6f6a63616062676d7883909da7b1bcc7d3e0e1d5c9beb3a9998d807366554b4035291d1004000000000007131d2a36414c56606c77828f959fa6afb5babfc4c5c7cbcfcac6c5c3c1bfbfbab9b9bbc0c7d0d9e4e8dccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79868e9196989b9d9fa4aba6a8a9abacafb5aeaeaeb5afacaba9aba39f9b948f857d6f6a5f544b4030261c1106000000000000000000030c1924303a444d575e676d747d84898f9299999c9e9e9fa3aaa29f9e9c9b99979596918f8c8987858280796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d60534b5865717e8b98aab4bfcac6c6c6c6c6c6c6c6c6c6c6c6c6c6c6beb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c2cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbbfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000613202c3945515d6776828f9caab4bfcad6e3e0d4c8bbafa49a92857c746f6e6d6f7279828f959fabb9c2cdd8e4dfd2c6b9ada197897c6f6356493c2f24180c000000000000010d1925303b44505b656d798390949fa3abaeb4b7b9bbbfbbbeb9b8b6b4b2b4aeacacafb6bec7d2dde8dccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c787e8184888b8e919399989a9b9d9e9fa4a0a1a1a1aba39f9e9c9a99928f89827b6f6b60584e42392e1e140a000000000000000000000008131e28323b454d555d606b70787d82868a8c8f9192929993989291908e8d8b898784827f7d7a7876746d675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d60534b556774818e9aa7b4c1d0dbd2d2d2d2d2d2d2d2d2d2d2d2d2cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5bebebebebebebebebebebebebebebebebeb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000004111d2935404b5565727e8b98a2aebac7d2dde4d8ccc0b6aca1979286817c7a7a7b7f848f949ea7b1bccbd4dee4d8ccc0b6ac9e9185786c605346392d2013070000000000000008141e27333f49535d676d7a828c92999fa3abaaacaeb5aeb3adabaaa8a6aba39f9fa4acb6c0ccd8e4dccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c7174787b7f818486898b8d8e9091939994949595949992918f8d8a86827d756e6960594f463c30271d0c020000000000000000000000020c162029333b434b515960656c70757a7d808284858687868685848382807e7c7a787573706d686967605c554b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053515d677784909daab7c3d0dddfdfdfdfdfdfdfdfdfdfdfdfd8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000010d18242f3a4754606d7a86929fabb5c0ccd7e1ddd2c7beb3a9a198928e898787888b91969ea6b0b9c3cddde6ded4c8bbafa49a8d8073665b5044382b1f120600000000000000020b17222d38414c555d686d7880878e92999b9d9fa3aba1a9a29e9d9b99979992939aa4afbbc8d4e0dccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b606468696e7275777a7c7e808283858686878788888787868483807d7a75706b615e574f463d342a1e150b00000000000000000000000000040e172029313a41454f535b6063686d7073767778797a7a797978767573716f6d67686663615e565a53514b43392e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605353606d7a86929facb9c5d2dfe8e4e0dfe0e4e8eef5ecece5d8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000713202c3945525d6874818e99a4afbbc5d0dbe4d9d0c5bbb3aaa39f9a96949395989ea1a8b0b8c1cbd4dfe0d7cbc0b5ab9f93877b6e61544a3f33281c0f03000000000000000006111b262f3a434c565d666d737b81868b8e9192999495949792908e8c8a888688939facb9c6d2dfdccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a505357575f626568676d6f7273757678797a7a7b7b7b7b7a79787673716d68636059534d453d342b22180c030000000000000000000000000000050e171f282f353d41495053565e616366696b6b676d6d6c666b6968666462605d55595654524c4d4645403930271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605356636f7c8999a3afbbc7d4e0ddd8d4d2d4d8dde4ebf4f1e5d8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f98989898989898989898989898989898989898989898988c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000004111d2935414c56626e7c87939faab3becad6dce2d7cdc5bcb4aeaca7a2a1a0a2a5abacb2bac1cad3dde1d8cec6bbafa3998e8275695f5342382d22170b000000000000000000000a141d28313a444c545c60696e757a7e81848687888887868583817f7e7b7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f44464b4d535558555d60636567686a6b676d6d6e6e6e6e6d6c66696764605d56544f46423b332b2219100600000000000000000000000000000000050d161d24292f383f44464c525457595c5e555d6060605b545d5b5a585654514c4c4a474641413a38342e271e150b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60535965727f8c98abb5c0cbd7d9d2ccc8c6c8ccd2d9e2ebf5e5d8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875818b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000000010d19242f3a47535f6a74818e98a2aebac1cad8dddfd7cfc6bfbab9b4afadadaeb2b7b9bdc4ccd3dce0d8cfc6bcb2a89f92877b6e62574d422f261c110600000000000000000000020b161f28323a424a51575f62686d717577797a7b7b7b7a78777573716e7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3338393e4247484c4b515356585a5b5d555d60616162626161605b545a5754524c48443d36312921191007000000000000000000000000000000000000040c13181d262d33373a4146474a4d4f514b51545353504a504f4d4b49474541403d3a3936302d2c28231d150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053566875818e9ba8b5c1d1d9d0c7c0bbb9bbc0c7d0d9e4eee5d8cbbeb2a5988b7f7265584c3f3225190c000a1724303d4a5763707d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6256493c2f231609000000000000000013202c3946535f6c7986929facb9c5d2d9d9d3c6b9ada093867a6d6053473a2d2014070000000008131e2b37434e58616e7b85929fa5afb8c1ccd2d9e1d8d1cbc7c5c1bcbababbbec4c5c9ced6deddd7cec6bdb4aaa0968d8074695f53453b311d140a000000000000000000000000040d162028303940444d53565d616568666d6e6e6e6e6d676a6866646c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d31373a3b3f404547494b4d4f504b515354545555545453504a4d4a4745413a38322a251f170f07000000000000000000000000000000000000000001070b141b22272b3036393a3d4043444145474746443f4342403e3c3a39352f302e2d2a25201f1c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60535e687784919eaab7c4d1d2c7beb6afacafb6bec7d2dde8e5d8cbbeb2a5988b7f7265584c3f3225190c000916232f3c4855616b70727272727272727272727272727272727272727272727272726f6a6054473b2e221508000000000000000013202c3946535f6c7986929facb9c5ccccccccc6b9ada093867a6d6053473a2d20140700000000010f1a26313c46525e69717e8b939ea6b0bbc0c7d0d5d9dcd7d3d2cdc9c7c6c8cbd1d2d5dadcd7d2ccc4bcb4aba2989184796d60574d4233291f0b0200000000000000000000000000040d161e272e343c42474c525458545c6061616261605d555b595f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20262b2e2f2f35393a3c3f40424340454747484848484746443f403e3a39352f2c27211a140d050000000000000000000000000000000000000000000000020a11171b1f252a2d2e3033362f35393a3a3938332d3533312f2d2c29242321201d191313100c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6054616d7a8796a0acb9c5d2ccc0b6aca49fa4acb6c0ccd8e4e5d8cbbeb2a5988b7f7265584c3f3225190c000714202c38444f596163656565656565656565656565656565656565656565656565656260584e43372b1f1306000000000000000013202c3946535f6c7986929facb9bfbfbfbfbfbfb9ada093867a6d6053473a2d20140700000000000a15202a36424d57626c74818e949ea6afb6bec3c9ced2d5dadadad5d4d3d5d8dbdcd7d3d1cbc7c0bbb2aaa29992867c6f675d51453c3121180d000000000000000000000000000000040c151c232831373a4146474b4a50535455555453514b4e525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131a1e212224292c2d303234352f35383a3a3b3b3b3b3a3938332d312d2c29241e1b160e09030000000000000000000000000000000000000000000000000000060b0f13191d202124262924292c2d2d2d2b28222827252321201d19171413110d080604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605763707d8a96a8b2bdc9d4c8bbafa49a939aa4afbbc8d4e0e5d8cbbeb2a5988b7f7265584c3f3225190c0004101c28333e474f55575858585858585858585858585858585858585858585858585856544e463d32271b0f03000000000000000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2ada093867a6d6053473a2d2014070000000000030e1a25303b45505a606d78828f939fa4acb2b9bdc4c5c9cfcecfcfd0d0d0cfced1cbc7c5c0bbb5afa8a19892877d706a60554b40332a200f0600000000000000000000000000000000030b12181f262b3035393a3e3f44464748484847454045525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090e121415181d1f202325272824292c2d2e2e2f2f2e2e2d2b28222421201d1913100b0400000000000000000000000000000000000000000000000000000000000003080d111314171a1c181d202120201f1c171c1a18161413110d0807070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60596673808c99a6b3bfcec9bdb2a89f9386939facb9c6d2dfe5d8cbbeb2a5988b7f7265584c3f3225190c00000b16212c353e44484a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4947433d342b20160a00000000000000000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a093867a6d6053473a2d20140700000000000009141f29333e44515c666d79818d939aa0a8acb2b8b9bdbfc1c2c3c3c3c3c2c2c0bfbab9b5afaba49f9691867e706b61584e43392f21180e00000000000000000000000000000000000000070c151a1e24292d2e2e34383a3b3b3b3b3a393545525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608070c10131416181a1c181d1f20212122222121201f1c17171413110d080100000000000000000000000000000000000000000000000000000000000000000000010507070a0d070d1113141413120f0b060d0b09070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60576975828f9ca8b5c2cfc5b9aca0969184919eaab7c4d1dde5d8cbbeb2a5988b7f7265584c3f3225190c000005101a232c33383c3d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b37322b22190f0400000000000000000013202c3946535f6c79869299999999999999999999999993867a6d6053473a2d201407000000000000030d17212834404a545d676d78808891969ea0a8abadb2b2b4b5b6b7b7b6b6b5b3b4aeacaba39f99938d847c706c61594f463c31271d0f06000000000000000000000000000000000000000003090e13191d202123282b2d2e2e2f2e2d2c3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0d070c10131414151515151413120f0b06070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607070606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605f697885929eabb8c5d1c4b7aa9e918483909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000008111a21282c2f30323232323232323232323232323232323232323232323232322f2e2b27201910070000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c86796d6053473a2d20140700000000000000050f18232e39424b555d666c737d848b91969a9ea1a9a6a7a9a9aaaaa9a9a8a6aba39f9c99928e8781796f6a615a50473e342b1f150b000000000000000000000000000000000000000000000002080d111314171c1f2021222221202c3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000406070708080808070606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60616e7b8897a1adb9c6cec1b5a89b8e8183909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000810161c2023242525252525252525252525252525252525252525252525252523221f1b160f0700000000000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f786d6053463a2d201307000000000000000007121c273039434b545b606b6f787e84898e919697999b9c9c9d9d9d9c9b9a989992908b86817c746d67605850473e352c22190d0300000000000000000000000000000000000000000000000000010507060b101213141515151f2c3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6064717e8a97a9b3bec9ccbfb2a5998c7f83909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000050b10141617191919191919191919191919191919191919191919191919191615130f0a040000000000000000000000000c1825323e4b57636d727373737373737373737373737373736d665c5144382c1f12060000000000000000000b151e273139424a505960666d71787c8184878a8c8e8f909090908f8f8d8b8986837f7a756e6a605d554e463e352c231a100700000000000000000000000000000000000000000000000000000000000000030607080808121f2c3945525f6c7885929fabb8c5d1d1d1cfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d606773808d9aa6b3c0cfc9bdb2a896897d83909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000407090a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0908060300000000000000000000000000000a16222f3a46515b6366666666666666666666666666666666605c544a4034281c1004000000000000000000030c151f272f383f444f545c60666c7074787b7e7f8182838484838382807f7c7976726e68625f58514b433c342c231a11080000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabb8c5c5c5c5c5c2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60667683909ca9b6c3cfc5b9aca196877a83909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f4951575959595959595959595959595959595953514a42392e23180c0000000000000000000000030d151d262d333d424a51545b606367696e7173747676777776767573726f6d6765615e56534e45413a312b221a1108000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabb8b8b8b8b8b8b8b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d606d7985929facb8c5d1c4b7ab9e91847883909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4644403930271c1207000000000000000000000000030b141c2228303940444a505356575e6164666869696a6a6a6968676563605c5554524c47433c352f281f19100800000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabababababababababa99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d626f7c8898a2aebac6cec1b5a89b8e827683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353a3e3f4040404040404040404040404040403a38342e271e150b0000000000000000000000000000020a11171e272e34383f4446494d535457595b5c5d5d5d5d5c5c5a585653514b4746413b373129241d160d070000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929e9e9e9e9e9e9e9e9e9e9e9c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d65717e8b98aab4bfcaccbfb2a5998c7f7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2f32333333333333333333333333333333332d2c28231c150c0300000000000000000000000000000000060c151c23282d3338393d4246484b4c4e4f50515150504f4d4c494745403b3936302b262018130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929292929292929292929292928f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6774818e9aa7b4c1d0c9bdb2a896897d7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12181e222526262626262626262626262626262626201f1c18120b03000000000000000000000000000000000000030b12181c22282b2d31363a3b3e404143434444434342403f3c3a38342f2d2a251e1a150d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b778485858585858585858585858585858175685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d677783909daab7c3d0c5b9aca196877a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d121618191919191919191919191919191919191312100c0700000000000000000000000000000000000000000000070c11171c1f20252a2d2e313335363637373736353432302d2c2923201e19140f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a37434f5c6772777878787878787878787878787878756f65594d4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6d7a86929facb9c5d1c4b7ab9e9184787683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0706040000000000000000000000000000000000000000000000000000060b0f12131a1e2121242628292a2a2a2a2929272523201f1c1814110e080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b27333f4b5660676b6b6b6b6b6b6b6b6b6b6b6b6b6b6b68655d53483d3125180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6f7c8999a3afbbc7cec2b5a89b8f82757683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090e12141518191b1c1d1e1e1d1d1c1a19161413100c070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3a444e565c5e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b59534b41372c201509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d727f8c98abb5c0cbccbfb2a5998c7f727683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000306070707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0d0e1010111110100f0d0c09070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d28323c444b4f5152525252525252525252525252524f4d48413930251b0f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d75818e9ba8b5c1d1c9bdb2a896897d707683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000060b1012131413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c16202a323a3f4344454545454545454545454545454542413d3730271e140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d7784919eaab7c4d1c5b9aca196877a6d7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000002060a0f11171c1f2021201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607070707070707070707070707070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1820282e33373838383838383838383838383838383534312c251e150c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d7a8796a0acb9c5d1c4b7ab9e918478687683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000105090e12151b1c23282b2d2e2d29241e160e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b1012131313131313131313131313131312100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e161d23272a2b2c2c2c2c2c2c2c2c2c2c2c2c2c2c282725201b140c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a707d8a96a8b2bdc9cec2b5a89b8f82756a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000104080d11151a1e21272b2e34383a3a3935302820160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20202020202020202020202020201f1c17110a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c12171b1d1e1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c1b18150f0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a737f8c99a6b2bfceccbfb2a6998c7f736a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000001070d1114191e20262b2d3237383f44464746413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c23282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28231c150c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001060b0f111112121212121212121212121212120f0e0c09040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a75828f9ca8b5c2cfc9bdb2a896897d706a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000002080e13181d20252a2d31373a3d43474a505354524c443a3024190d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e262e34383a3a3a3a3a3a3a3a3a3a3a3a3a3a38342e261e160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7885929eabb8c5d1c5b9ada196877a6d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000050d14191d24292c3036393c4247484e54545c60615d564c4135291f140800000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f444646464646464646464646464646443f3830281f160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7b8897a1adb9c6d1c4b7ab9e918478686a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000050e171f252a2f35393b4146474d5355586062666d6d685d52463b3025190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424a505353535353535353535353535353504a423a31281d13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7e8a97a9b3bec9cec2b5a89b8f8275686a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000020d17202930363a4145474c5254575f61666a6f74797a6d61564d41362a1c11060000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c60606060606060606060606060605c544b433a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a808d9aa6b3c0cfccbfb2a6998c7f73666a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000008141f29323b41464b5154565e6165696e73777c80858175685e5246382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c666d6d6d6d6d6d6d6d6d6d6d6d6d6d665d554b4035291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867983909ca9b6c3cfc9bdb2a8968a7d70636a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00020e1925303b444d52555d6064686e72767b8084898d91867b6e61544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787979797979797979797979797976675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6baada093877a85929facb8c5d2c5b9ada196877a6e616a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0005111e2a36414d565e61676d71767a7f83888c91969a998c7f73665b5044382b1f1409000000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a778386868686868686868686868686796d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe2d5c9bcafa296897c8998a2aebac6d1c4b8ab9e918478685e6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000714202d3946525e686e757a7e82868b9095999ea0a89e9184786c6053463b31251a0e000000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909393939393939393939393867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe5d8cbbeb2a5988b7f8b98aab4bfcacec2b5a89b8f827568566a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000814212e3b4754616e7b81868b8f92999d9fa7aaacaca1968a7d7063574d42362a1c12070000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909da0a0a0a0a0a0a0a0a093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe7dbcec1b4a89b8e818e9ba8b4c1d0ccbfb2a6998c7f73665d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000713202d3a4653606d798592989c9fa3ababb1b7b9b2a89c8f8275695e5346392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaacacacacacacaca093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfeaddd1c4b7aa9e9184919eaab7c4d1c9bdb2a9968a7d70635d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0006131f2c3845515c6673808d9aa4acafb5b8bcc2c4b9ac9f93877b6e61544a4034281c100400000000000000000000000000000000000000000000000000000000000407090a0b0b0b0b111e2a3744515d6a7784909daab7b9b9b9b9b9ada093867a6d6053473a2d20140b0b0b0b0b070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecded2c5b9aca0969196a0acb9c5d2c5b9ada196877a6e615d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0004101c2834404b54616e7b87939facb9c0c7c8cdc7bbafa4998d8073665c5144382c1f1509000000000000000000000000000000000000000000000000000000050b1013161618181818181e2a3744515d6a7784909daab7c3c6c6c6b9ada093867a6d6053473a2d201818181818181413110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfece1d5c9bdb2a8a09ea0a8b2bdc9d1c4b8ab9e918578685e5d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000c18232e3946535f6976828f9ca8b2bdc9d4d7ccc0b5ab9e9185796d6053463c31261a0e0100000000000000000000000000000000000000000000000000070f161c2022232424242424242a3744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a2d2424242424242421201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfece5d9cec4bab2acaaacb2bac4cecfc2b5a89c8f827569565d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000007121d2a36424d5764707d8a96a1adb9c7d1dcd2c7b9ada1978a7d7164574d42372b1d120700000000000000000000000000000000000000000000000007111921272c2f30313131313131313744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a31313131313131312d2c29241e160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecebe0d5ccc4bdb9b7b9bdc4ccd5ccbfb2a6998c7f7366595d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000e1a26313b4653606d7884919eabb5c0cbd7d5c9beb3a99c8f8276695f5347392f23180c0000000000000000000000000000000000000000000000050f19232b33383c3d3e3e3e3e3e3e3e3e44515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473e3e3e3e3e3e3e3e3e3a39352f281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecf1e7ded5cec9c5c4c5c9ced5d5c9beb2a9968a7d7063575d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000009141f2b3844505c6673808c99a3afbbc7d4dacfc4b9ac9f93877b6e62554b4034291c1004000000000000000000000000000000000000000000000b16212b353d4448494b4b4b4b4b4b4b4b4b515d6a7784909daab7c3d0d3c6b9ada093867a6d60534b4b4b4b4b4b4b4b4b4b4745413a31281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecf2f0e7e0d9d5d2d1d2d5d9dfd2c6b9ada197877a6e61545d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000003101c28343f4a54616e7b87929facb9c4ced9d4c8bbafa49a8d8073675c5145382c1f150a00000000000000000000000000000000000000000004101c27333d474f5456575757575757575757575d6a7784909daab7c3d0d3c6b9ada093867a6d60575757575757575757575754524c433a2f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe5e5e5e5e5e5e1dedddee1e5ded1c4b8ab9e918578685e525d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000b17232e3846525e6975828f9ba8b2bdc9d5d8ccc0b6ac9e9285796d6053473c31261b0f0100000000000000000000000000000000000000000713202c38444f59606364646464646464646464646a7784909daab7c3d0d3c6b9ada093867a6d646464646464646464646464605d564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2d9d9d9d9d9d9d9d9d9d9d9d9d9d9cfc2b5a89c8f827569564d5d6a7683909da9b6c3d0d9d9d8cbbeb2a5988b7f7265584c3f3225190c0000000006111c2a36424d5763707d8996a0acb9c6d1dcd2c7b9ada2978b7e7164584e43372b1d130700000000000000000000000000000000000000000916222f3c4854606b707171717171717171717171717783909daab7c3d0d3c6b9ada093867a717171717171717171717171716d685d5245392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5ccccccccccccccccccccccccccccccccbfb3a6998c80736659505d6a7683909da9b6c3cccccccccbbeb2a5988b7f7265584c3f3225190c00000000000e1a25303b4653606c7884919eabb4bfcbd7d6cabeb3a99d9083766a5f53473a2f24180d01000000000000000000000000000000000000000a1623303d495663707d7e7e7e7e7e7e7e7e7e7e7e7e7e84919eabb7c4d1d7cabeb1a4978b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbeb3a9968a7d706357505d6a7683909da9b6bfbfbfbfbfbfbeb2a5988b7f7265584c3f3225190c000000000009141f2b3744505b65727f8c99a3aebac7d3dbcfc5b7ab9f95887c6f62554b4035291d110400000000000000000000000000000000000000101d2a3643505d6976828a8a8a8a8a8a8a8a8a8a8a8a8a9196a1acb9c5d2d8cbbfb2a69b908b8a8a8a8a8a8a8a8a8a8a8a8a887c6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2ada197877a6e6154505d6a7683909da9b2b2b2b2b2b2b2b2b2a5988b7f7265584c3f3225190c0000000000030f1b27333f4953616d7a86929facb9c3ced9d3c7bcb1a79a8d8174675d5145392c20150a00000000000000000000000000000000000000101d2a3643505d697683909797979797979797979797979ea1a8b2bdc9d5dbcfc3b7aca29b97979797979797979797979795887c6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69e918578695e52505d6a7683909da6a6a6a6a6a6a6a6a6a6a5988b7f7265584c3f3225190c0000000000000b17222d3846525e6875818e9ba7b1bcc8d4d8cdc2b8ab9f92857a6d6053473d32271b0f01000000000000000000000000000000000000101d2a3643505d697683909ca4a4a4a4a4a4a4a4a4a4a4abacb2bac4cedadfd4c8beb4aca6a4a4a4a4a4a4a4a4a4a4a4a295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79869299999999999999999999999999999999999999999999998f827569564d505d6a768390999999999999999999999999988b7f7265584c3f3225190c00000000000006111b2a36414c5663707c8995a0acb8c6d0dbd3c6baaea2988b7e7165584e43372b1e1308000000000000000000000000000000000000101d2a3643505d697683909ca9b1b1b1b1b1b1b1b1b1b1b7b9bdc4ccd6e0e5dad0c6beb7b2b1b1b1b1b1b1b1b1b1b1aea295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c807366594d505d6a76838c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7f7265584c3f3225190c000000000000000d1925303a4854606b7784919daab4bfcad6d6cabeb4aa9d9083776a6054473a2f24190d010000000000000000000000000000000000101d2a3643505d697683909ca9b6bdbdbdbdbdbdbdbdbdc4c5c9ced6dee8ece2d8d0c8c3bfbebdbdbdbdbdbdbdbdbbaea295887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6255484b5864717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6255493c2f2216090000000000000008131e2c38444f5965727f8b98a2aebac7d3dbd0c5b8aca095897c6f62564c4135291d11040000000000000000000000000000000000101d2a3643505d697683909ca9b6c3cacacacacacacacad1d2d5dae0e8f0f4eae2dad4cfcbcacacacacacacacac8bbaea295887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323e4b57636d72737373737373737373737373737373737373737373737373736f6a5f53474956626c717373737373737373737373737373736f6a6054473b2e2215080000000000000002101b27323d4754606d7a86929facb8c3cdd9d4c8bcb1a79b8e8174685d5245392c20160b0000000000000000000000000000000000101d2a3643505d697683909ca9b6c3cfd7d7d7d7d7d7d7dedee1e5ebf2fafcf4ece5dfdbd8d7d7d7d7d7d7d7d5c8bbaea295887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222f3a46515b636666666666666666666666666666666666666666666666666666625f584e4345505a62646666666666666666666666666666666260584e43372b1f130600000000000000000b16202c3945525d6874818e9ba7b1bcc8d4d9cdc3b8ac9f92867a6d6054473d32271b100200000000000000000000000000000000101d2a3643505d697683909ca9b6c3ccccccccccccccccd1d2d5dae1e8f1f5ece3dcd5d1ceccccccccccccccccc8bbaea295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f495157595959595959595959595959595959595959595959595959595955534e463c3e4850565859595959595959595959595959595955544e463c32271b0f03000000000000000004111d2935414c56626f7c8995a0acb8c5d0dbd3c7baaea2988b7f7265594f44382c1e130800000000000000000000000000000000101d2a3643505d697683909ca9b6bfbfbfbfbfbfbfbfbfc4c6c9cfd6dfe8eee3dad2cac5c1c0bfbfbfbfbfbfbfbfbbaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847433c34363e45494b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4947433c342b20150a000000000000000000010d19242f3a4754606a7783909daab4becad6d6cabfb4aa9d9184776b6054483a3025190d00000000000000000000000000000000101d2a3643505d697683909ca9b3b3b3b3b3b3b3b3b3b3b8b9bec4cdd6e1e7dcd2c8c0b9b5b3b3b3b3b3b3b3b3b3b3aea295887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353a3e3f404040404040404040404040404040404040404040404040403c3a37312a2d34393d3e4040404040404040404040404040403c3b37322b22190f040000000000000000000008131e2b37434e5865727e8b98a2aebac6d3dbd0c6b8aca095897c7063564c41362a1b1106000000000000000000000000000000101d2a3643505d697683909ca6a6a6a6a6a6a6a6a6a6a6abadb3bbc4cfdae1d5cac0b6aea8a6a6a6a6a6a6a6a6a6a6a6a295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2f3233333333333333333333333333333333333333333333333333332f2e2b262022292d30313333333333333333333333333333332f2e2b27201910070000000000000000000000010f1b27323d4753606d7a85929fabb8c2cdd8d4c8bcb1a79b8e8175685e5246382d22170b000000000000000000000000000000101d2a3643505d697683909999999999999999999999999ea1a9b3bec9d5ddd1c5b9aea49c99999999999999999999999995887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12181e2225262626262626262626262626262626262626262626262626262622211f1b15171d21242526262626262626262626262626262622221f1b150f07000000000000000000000000000a16202c3945515d6774818d9aa7b1bcc7d4d9cec3b9ac9f92867a6d6153493f33271b0f030000000000000000000000000000101d2a3643505d6976838c8c8c8c8c8c8c8c8c8c8c8c8c9197a1adb9c6d2dacec1b5a89c928d8c8c8c8c8c8c8c8c8c8c8c8c887c6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191919191919191919191919191919191919191919191515120f0a0c111517181919191919191919191919191919191615130f0a04000000000000000000000000000004111d2935404b55626f7c88959fabb8c5cfdbd3c7baaea3998c7f72655b5044372b1f140900000000000000000000000000000b1825323e4b5865717e8080808080808080808080808085919eabb8c4d1d9ccc0b3a6998d80808080808080808080808080807a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d09080603000005080a0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0908060300000000000000000000000000000000010d18242f3a47535f6a7683909da9b3becad6d7cbbfb4ab9e9184786c6053463b30251a0e00000000000000000000000000000b1724313d4a56626c717373737373737373737373737783909daab7c3d0d3c6b9ada0938679737373737373737373737373736d685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2b37434e5864717e8b97a2adb9c6d2dcd1c6b9aca096897d7063574d42362a1c1106000000000000000000000000000915212e3a45505a626566666666666666666666666a7784909daab7c3d0d3c6b9ada093867a6d666666666666666666666666615e564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607080808080807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b26313c4753606d7985929eabb8c2cdd8d5c9bdb2a89b8f8275695e5246382e23170b0000000000000000000000000005111d29343f48505658595959595959595959595d6a7784909daab7c3d0d3c6b9ada093867a6d60595959595959595959595954524c443a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040707070d11131414151515141413100c070b08070502000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa6b0bbc7d3d9cec4b9ac9f92877b6e61544a3f34281c1003000000000000000000000000010c18222d363f454a4b4d4d4d4d4d4d4d4d4d515d6a7784909daab7c3d0d3c6b9ada093867a6d60534d4d4d4d4d4d4d4d4d4d4746413a32291e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11131417181d20212122222221201f1d181a181414110e0906020000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55626e7b88949fabb7c4cfdad4c7bbafa3998c8073665c5044382b1f14090000000000000000000000000006111b242d343a3d3e404040404040404044515d6a7784909daab7c3d0d3c6b9ada093867a6d6053474040404040404040403a3936302920170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1013191d20212424292c2d2e2f2f2e2e2d2c2924272421201e1a14120e09030000000000000000000000000000000000000000000000000000000000000000000c18232f3947535f6976828f9ca9b3bec9d5d7cbc0b5ab9e9184786d6053463b31261a0e000000000000000000000000000009121b22292e3132333333333333333744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a33333333333333332e2d2a251e170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f161c1e24292c2d312f35393a3b3b3b3b3b3a38352f34312e2d2a25211e1a150f0a040000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717e8a97a1adb9c7d2dcd1c7b9ada1968a7d7064574d42362a1d120700000000000000000000000000000911181d2124252626262626262a3744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a2d2626262626262621201e19130d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151b21272c3035393a3e41414547474848484747454042403e3b3a36302e2b26201b160d08020000000000000000000000000000000000000000000000000000000000010e1a26313c4653606d7985919eabb5c0ccd7d5c9bdb2a89c8f8276695f5346392e23180c000000000000000000000000000000060c111517181a1a1a1a1a1e2a3744515d6a7784909daab7c3c6c6c6b9ada093867a6d6053473a2d201a1a1a1a1a1a1413110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111720262b33383a4145474a4e4b5154545555555453514b4f4d4b4746423b3a37312c272119140d05000000000000000000000000000000000000000000000000000000000009151f2c3844515c6673808d99a4afbbc7d4dacfc4b9ac9f93877b6e61544b4034281c10040000000000000000000000000000000105090b0b0d0d0d0d111e2a3744515d6a7784909daab7b9b9b9b9b9ada093867a6d6053473a2d20140d0d0d0d0d07070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b141c222832373d44484c5254575a555d606162626161605d555c5a5754524d4847423c38322a251e170e070000000000000000000000000000000000000000000000000000000004101c2834404a54616e7b87939facb9c4cedad4c8bbafa49a8d8073665c5145382c1f1509000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaacacacacacacaca093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d262d333c43474f54565d6064676a676d6e6e6e6e6e6d676b696764615e5755534e48433d36302920191108000000000000000000000000000000000000000000000000000000000c18232e3946535e6975828f9ca8b2bdc9d5d8ccc0b6ac9e9285796d6053463c31261a0f010000000000000000000000000000000000000000000004111e2a3744515d6a7784909da0a0a0a0a0a0a0a0a093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161f282f383f444e53596063686d717476787a7a7b7b7b7a7a79777573716e6966625f57544f46413b322b231a110800000000000000000000000000000000000000000000000000000007121c2a36424d5763707d8a96a1acb9c7d1dcd2c7b9ada1978a7e7164584e43372b1d12070000000000000000000000000000000000000000000004111e2a3744515d6a7784909393939393939393939393867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c161f28313a424a50585f626b70757a7d81838587878888888786858482807e7b77736e6a636059524c443d352c231a11070000000000000000000000000000000000000000000000000000000e1a25313b4653606c7884919eabb5c0cbd7d5c9beb3a99c8f83766a5f5347392f24180c0000000000000000000000000000000000000000000004111e2a3744515d6a778386868686868686868686868686796d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e28313a434b545b606a6f767d82868a8d90929794959594949892918f8d8a8784807b766f6b615e564f473e362c23190f05000000000000000000000000000000000000000000000000000009141f2b3844505b66737f8c99a3afbbc7d3dacfc5b7ab9f94887b6e62554b4035291d1004000000000000000000000000000000000000000000000713202d3a4653606d787979797979797979797979797976675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303a434c555d666c737c82898e92999a9d9ea2a9a1a1a1aaa29f9e9c9a9795918c87827c756e68605950483e352b21170d0300000000000000000000000000000000000000000000000000030f1c28333f4a54616e7b86929facb9c3ced9d3c7bbb0a69a8d8074675d5145382c1f150a0000000000000000000000000000000000000000000006121f2b3844505c666d6d6d6d6d6d6d6d6d6d6d6d6d6d665d554b4035291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d17232e38424c565d676d7880878f949b9fa3aba9abadb3aeaeaeb4aeacaaa8a6a8a09d9a938f89817a706b615a50473d33291f140900000000000000000000000000000000000000000000000000000b17222d3846525e6875828f9ba8b2bdc8d4d8cdc2b8ab9f9285796d6053473c32261b0f0100000000000000000000000000000000000000000003101c28343f4a545c60606060606060606060606060605c544b433a2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f28343f4a545d686d79828c93999fa6acaeb5b6b8b9bebbbbbbbfbab8b7b5b3b1acaca49f9c938e857d706c61594f453b31251a0e050000000000000000000000000000000000000000000000000006111c2a36414d5663707d8996a0acb9c6d1dcd3c6baada2978b7e7164584e43372b1d1307000000000000000000000000000000000000000000000b17232e38424a505353535353535353535353535353504a423a31281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313944505c666d7a838f949fa4abb0b9bbbfc3c5c6cacfc8d0cac6c5c4c2c0bdb8b6afaca59e9791877e706b60574d42362a21160b00000000000000000000000000000000000000000000000000000e1925303b4653606c7884919eaab4bfcbd7d6cabeb3a99d9083766a5f53473a2f24180d0100000000000000000000000000000000000000000006111c2630383f444646464646464646464646464646443f3830281f160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f39434f59606d78828f959fa6afb5bdc2c7cbd1d1d2d6dbd4dbd6d3d2d1cfcec8c7c0bbb9afa9a19992877d70695e53463d33271c10030000000000000000000000000000000000000000000000000008141f2b3744505b65727f8c98a3aebac7d3dbd0c5b8ab9f95887c6f62554b4135291d1104000000000000000000000000000000000000000000000a141e262e34383a3a3a3a3a3a3a3a3a3a3a3a3a3a38342e261e160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616b74808d949fa7b0bbc0c7d0d3d7dcd9d5d2d1cfcfd0d2d4d7ddd9d4d2ccc8c1bbb3aba39992857b6e61594f44382c20150900000000000000000000000000000000000000000000000000030f1b27333f4953616d7a86929facb9c3ced9d4c8bcb1a79a8e8174675d5145392c20160a00000000000000000000000000000000000000000000020c141c23282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28231c150c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d67707d8a929da6b0b9c2ccd2d9dcd7d4cec9c5c4c3c2c3c6c7ccd2d9e2ddd8d4cdc4bdb4aba1978f82756b6054483c31261a0e02000000000000000000000000000000000000000000000000000b17222d3846525e6875818e9ba7b1bcc8d4d8cdc2b8ac9f92857a6d6054473d32271b0f0200000000000000000000000000000000000000000000020a11171c1f20202020202020202020202020201f1c17110a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606d7984919ea4aeb8c2cbd7ddd9d1cbc7c4bdb9b7b6b5b6b9bbc0c7d0d2dbe4dfd6cfc6bdb3a99e94897d7063574d42372b1e12060000000000000000000000000000000000000000000000000006111b2935414c56636f7c8995a0acb8c6d0dbd3c6baaea2988b7e7265594f43382c1e1308000000000000000000000000000000000000000000000000060b1012131313131313131313131313131312100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d6873808c96a1acb6c0cad4ddd8cfc7c0bbb9b2acaaa9a8aaacafb5bdc0c9d1dae3e1d8cfc5bbb0a69c8f8276695f53473a2e21140600000000000000000000000000000000000000000000000000000d1925303a4854606b7783909daab4bfcad6d6cabfb4aa9d9083776b6054483a3024190d000000000000000000000000000000000000000000000000000003060707070707070707070707070707060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606d7a85929fa8b2bdc8d2dcd8cec6bdb5afaca8a09e9c9c9d9fa4abafb7bfc8d1dde7e1d7cdc1b7ab9f94887b6e6255483b2e23170c000000000000000000000000000000000000000000000000000008131e2c38434f5965727f8b98a2aebac6d3dbd0c5b8aca095897c6f63564c4135291b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b65727f8c97a2adbac4cedadcd0c6bcb4aba39f9a9691908f9093999da5adb6bfcbd5dfe9dfd3c7bbb0a6998c7f7266544a3f34281c100300000000000000000000000000000000000000000000000000020f1b27323d4754606d7a86929facb8c3cdd8d4c8bcb1a79b8e8174685d5246382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7884919ea9b3beccd6e0d6cbbfb4aaa399928d8884838283878e929ca3adb9c3cdd9e4e3d8ccc2b6a99c908376665c5044382c1f120600000000000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7b1bcc8d4d9cec3b8ac9f92867a6d6153493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d8996a0acbbc5d0dee0d3c7baaea3989287807b777675777a818c919ca7b1bcc8d4e0ebdfd2c5b8ac9f9285796d6053463a2d201307000000000000000000000000000000000000000000000000000004111d2935414c55626f7c88959fabb8c5d0dbd3c7baaea3988c7f72655b5044372b1f140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586774818e9aa8b2bdcdd7e1d4c8bcb1a79f92867d746e696969686e747f8c95a0acb8c4d1deeae0d3c7baaea298887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000010d19242f3a4754606a7783909da9b3becad6d6cbbfb4aa9d9184786c6053463b3025190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7884919eabb7c4cededed1c5b8aca0958b7e716b615f57565e616c7883909daab6c3d0dde9e2d6cabfb4aa968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000000000008131e2b37434e5865717e8b97a2adbac6d3dcd0c6b8aca096897d7063564c41362a1c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8896a1adb9c5d2dfddd0c3b7aa9d9083786c6059534d4c525b65727e8b98a5b1becbd8e4e7dbd0beb1a5988b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000000010f1b27323c4753606d7985929fabb8c2cdd8d4c8bdb2a89b8e8275685e5246382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a8b2bdc9d5e1d6cabfb4aa988c7f72665b504642414953626f7b8895a2aebbc8d5e1e5d8cbbfb2a5988c7f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000a151f2c3945515d6774808d9aa6b0bcc7d3d5cec3b9ac9f92867a6e61544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a546874818e9ba7b4c1cfdae0d3c7baaea298887b6e62544a3f373a4754616d7a8794a0adbac7d3e0e5d9ccbfb2a6998c7f7366594c403326190d0000000000000000000000000000000000000000000000000000000004101d2935404b55626f7b88949fabb7c5cfc9c6c4bbaea3998c7f73665b5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c667784909daab7c3d0dddfd2c5b8ac9f9285796c6053463c3c3c4754616d7a8794a0adbac7d3e0e5d9ccbfb2a6998c7f7366594c403326190d00000000000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9b3bec5beb9b8b2acab9e9184786c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facb9c5d2dfddd0c3b7aa9d908477655b504a4948484953626e7b8895a1aebbc8d4e1e5d8ccbfb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1adb9b8b3adaba8a09e99958a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8899a3afbbc7d4e0dccfc2b5a99c8f827669565856555555565b65717e8b97a4b1becad7e4e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eacaeaca9a19e9a96918c88837d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996abb5c0cbd7e3dbcec2b5a89b8f82756968656362626263656c7883909da9b6c3d0dce9e4d8ccc0b6ac978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4a29f9b97928d8984807b77706b6155483c2f2316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1bed1dce8dbcfc2b5a89c8f827b787472706f6f6f6f7277808d959fabb7c4d1ddeae0d4c8bbafa49a897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000000000004101c2834404b55616e7b87939c98928e8a85807c77736e6a6361594f44382c2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a6b2bfccd9e5dcd0c3b7aa9e948f8784817f7d7c7b7b7c7f838d929ca7b1bcc7d3e0ecdfd2c6b9ac9f93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f8f8a85817d79746f6a66625f57554f473e33281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d9aa7b3c0cddae6dfd3c7bbb0a69e9c96918e8b89888888898b90959ca4aeb9c2cdd8e4eaddd0c4b7aa9d918477675d5145392c2013060000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717e86827e7a75706d6662605855534e48443e352c21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7e3d7ccc1b8b0aaa8a19e9b989695959596989d9fa7aeb6c0cbd4dee9e1d5c9beb3a99a8d817467554b4035291d110400000000000000000000000000000000000000000000000000000000000000000e1a26313c4653606d787a75716d6763605c54544e4847423c38332c231a1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9ba8b5c2cedbe8e9ded3cac1bbb7b2acaba7a5a3a2a2a2a2a5aaabb1b9c0c8d1dde6e4dbd2c6b9ada1978a7d7063574a3d2f24180d01000000000000000000000000000000000000000000000000000000000000000009141f2c3844505c666d6d6864605d5553504a47433d3a37312c28211a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca8b5c2cfdbe8efe5dcd3ccc7c4bdb9b7b4b2b0afaeaeafb2b6b8bcc3cbd1dae3e5dcd5c9beb3a99e9185796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c60615e5653514b46443f3838322e2b26201c161008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9ca9b5c2cfdce8f5eee5ded7d3cec9c5c4c1bebcbbbbbbbcbec3c4c8cdd4dde5e0d9d5c9c1b9ada1978c8073665c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000c17232e38424a505354524c4745403a38342e2b27211e1a15100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d293643505c6976838f9ca9b6c2cfdce9f5f7efe9e3e0dad5d2d1cecbc9c8c8c8c9cbd0d1d4d8e0dfd9d4cec9c0b7afa59e92857a6d60544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000006111c2630383f44464746413a39352f2c28231c1b16120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9ca9b5c2cfdce8f5efe7dfd9d4d1d0cbcdd0d2d4d7dcd5d5d8dbdadcd7d4d2cec8c4bdb9aea59d938b7e71685d5242392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000a151e262e34383a3a3936302c29241f1c17110f0a060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca8b5c2cfdbe8f1e7ddd5cec8c5c3bec0c3c5c7cbd1cececececdd1cbc7c5c3bdb8b2aca49d938e81746c61564c4130271d1207000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d2e2d2a25201d1812100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8eadfd5cbc3bcb8b7b1b3b6b9bbc0c0c1c2c1c1c0bfc0bbb9b6b2aca8a09e928d81786d605a50433a2f1e150b0000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2021201d1913100d070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7e4d9cec3b9b1acaaa4a6a9acafb5b3b5b5b5b4b3b2b5afacaaa8a09d96918a80786d665c50483e31281e0c0300000000000000000000000000000000000000000000000000000000000000000000000000000000060c1012131413110d080401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9aa6b3c0cdd9e6e0d4c8bcb1a7a09d989a9d9fa3aba7a8a8a8a8a7a5aba39f9d9a96918b847d746d665c544a3f362d1f160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060707070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c98a5b2bfcbd8e5ded1c5b8aca095908b8d909299989a9b9b9b9b9a99979992908d89847e79706b605c544a42382e241b0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcfdae5ddd0c3b7aa9d90837e808386898b8d8e8f8e8e8d8c8b888683807c77716d676159504a423830261c1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a8b2bdc9d5e1ddd0c3b6aa9d90837773767a7c7f8082828281807f7e7c7a77736f6a65605c554f443f3830261e150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8796a1adb9c5d2dfded1c4b7ab9e91847869676d6f7274757575757472716f6d676762605853514b433e342e2e29221b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677884919eabb7c4d1dedfd2c5b9ada196877b6e61606365676868686867666462605d5556544e46454040423e3d3a342d241b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b556875828f9ba8b5c2cedae1d5c9bdb2a8978b7e71655b56585a5b5c5b5b5a59585553514b494746484a4b4d4f4b4a453f362d22180c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3f4c5865727f8b98a8b2bdc9d5e1dacfc3b7aa9d9083786c605b53504a4f4f4e4d4c4b4c4d4e4f4b51535556585a5c585650483f34291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000716222f3c4955626f7c8896a1acb9c5d2deded1c5b8aca0958c7f726d63605b54585757575758595a5b5c545c60616365666865625a50453a2e2115090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7884919eabb7c2cdd8e0d4c8bcb1a79f93887f76706c6666656464646465656667686a666d6e70717375716c62564a3d3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e586773808d9aa6b0bbc7d3e1d9cec3bbafa49a938b827d797573727170707171727374757778797b7d7e80827e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4855626f7c88949fabb7c2cfd9dfd8ccc0b6aca49f948f898582807e7e7d7d7e7e7f80818283858688898b8d8e8174675b4e4134281b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3b47535f6a76828f9ca6b0bdc7d1dcddd2c7beb6afa69f9c97918f8c8b8a8a8a8a8b8c8d8e8f9091939a9698998f8276695c4f433025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5863707d8a949fabb5c0cbd7ddd9d0c7c0bbb0aba9a19e9b9998979797979898999a9b9d9e9fa4aca49d9184776a564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4855616b76828f99a3afbbc2cbd5ddd9d2ccc2bbb7b3adaba8a6a5a4a3a3a4a4a5a6a7a8aaabacafb6ac9f928579685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f59626f7c87929fa6b0b9c3cbd6dbddd8ccc7c4beb9b8b5b3b1b1b0b0b1b1b2b3b4b5b6b8b9bbbaaea298877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e47535f6a73808c949fa7b1b9c1cad0d7ddd8d3cfc9c6c4c2bfbebdbdbdbdbebfc0c1c2c3c4c6c8bfb4aa95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b37434e58606c78828f95a0a7b0babfc6ccd2d6dadad5d2d1cecccbcacacacacbcbcccdced0d1d2d0bdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1b26313c44505b666d7a8390959ea6aeb4bbc0c7cacfd2d3d7dcd8d9d8d7d6d6d7dad6d2d1cfcfc9c6c4bfb2a5988c7f7265594c3f3226190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a152028333f4a545e686d7a838f949fa2aaafb5b9bec3c5c7cbd1cccccdcccccbcbcfcac6c5c2c0beb9b8b4b2a79a8d8074675a4d4134271a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b17222d38424c565e686d7a828c92989fa4abadb3b6b9babfbebfbfc0c0bfbfbebdbeb9b8b6b3b2adaba8a8a09b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3a444c565e686d777f868e93999ea1a9a9acaeb4b1b2b3b3b3b2b2b1b0b3adaba9a6a9a19e9b9896918e83776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28323a444c565d656c727b81878d92979a9d9fa3aaa4a5a6a6a6a6a5a5a3a9a19e9c9a9797918e8b8884817e7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b162029323a434c535b60696e757b8085898d909298969899999a99999898969597928f8d8a8885817e7b7774706c6155493c3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e172029313a414950575e61696e74797d80838688898b8c8c8d8d8c8c8b8a88878583807e7b7875716e696764615a5044392d20140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f282f383f444d53575f61666d707476797b7d7e7f8080807f7f7e7d7b7a787673716e696865615f57575550473e33281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d161d262d333b42464d53545c606367666d6e707172737373737272706f6d67696764625f575855534d4a49443e352c22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b141b222731363b42464a505356545c60626365666667666665656362605d555a5755534d4b4846423d3c39332c231a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171f252a3136383f44464a4b515355565859595a5a595958575554514b4d4b4847423e3b3a3631302d28221a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b141a1f262a2e34383a3d404546484a4b4c4d4d4d4c4c4b4a48474541403e3b3a37312e2d2a2623201c1710080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e141a1c23282c2d2e34383a3b3d3e3f404040403f3f3d3c3a39352f312f2e2b2622211e1a1614100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e11171c1f2023282c2d2f303233333433333232302f2d2c29242422211e1a1514120e090804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c101213181c1f2022232526262727262625242221201d18181514120e0907050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070c101313151718191a1a1a19191817151413110d070808060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607080a0b0c0d0d0d0d0c0c0a0907060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e13131313131313131313131313131313070704080c0e0f13131313131313131313131313131313080705090c0e0f13131313131313131313131313131313130604010000000000000000000000000105090b0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0b09060100000000000000000000000000000000000000000000000000000000000004090c0e0f1313131313131313131313131313130b0a080400000000000000000000000000000000000000000000000000000005080a0b13131313131313131313131313131311110e0b0601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070808080808080707060300000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070809090a0909080706040000000000000000000000000000000000000000000000000000000000000106090b0c13131313131313131313131313131313131313131313131313131313131313131313131313130c0b09060100000000000000000000000000000000000000000000000000000000010406070708080808070606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030606070604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070708080808080706040100000000000000000000000000000000000000000000000000000000000000000003090d101213131313131313131313131313131313130604010000000000020507081313131313131313131313131313131313130a090704000000000000000000000003090d1012131313131313131313131313131313131306040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003050607080808080707060400000000000000000000000000000000000000000000000000000000000000000000000000000407090a131313131313131313131313131313131313131313131312110f0e101013131313131313131313131313131313131313131313130a090704000000000000000000000000000000000000000000040607121313131313131313131313131313130d0c0a06020004080a0a1313131313131313131313131313131308070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b2020202020202020202020202020202014131114181b1b2020202020202020202020202020202014141115191b1c202020202020202020202020202020202013110d0701000000000000000000060c111517181a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a191816120d0700000000000000000000000000000000000000000000000000000002091015191b1c202020202020202020202020202020171714110c050000000000000000000000000000000000000000000000060c111417182020202020202020202020202020201e1d1b17120c040000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090c080d111314151515151515141312100b060e0d0b0a090706040100000000000000000000000000000000000000000000000000000000000000020507080a0c070d111314151616161616151312100c07080602000000000000000000000000000000000000000000000000060d121518192020202020202020202020202020202020202020202020202020202020202020202020202020191816120d07000000000000000000000000000000000000000000040607090c070d10131414151515151413120f0b0609060603000000000000000000000000000000000000000000000000000000000000000000000000000000000205060b0f12131413110d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506080b060b1012131414151515141413110d070a070604000000000000000000000000000000000000000000000000000000070e14191d1f202020202020202020202020202020202013110d07010003090e121415202020202020202020202020202020202020171614100b050000000000000000070e14191d1f202020202020202020202020202020202013110d07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607060b0f12131415151515141313100c070d0b0906060300000000000000000000000000000000000000000000000000000000050b1013161720202020202020202020202020202020202020202020201f1e1b1a1c1d2020202020202020202020202020202020202020202020171614100b050000000000000000000000000000000001070c1013141f202020202020202020202020202020191916120d0b10141617202020202020202020202020202020201514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131a202427272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d202427282d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d21201e212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c04000000000000000911181d212425272727272727272727272727272727272727272727272727272727272727272727272727272525221e18110901000000000000000000000000000000000000000000000000030c141b212528292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2423211c1710080000000000000000000000000000000000000000000810171d2123242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2a27231d160e060000000000000000000000000000000000000000000000000000000000000000000000000003060b10121316181b191d202121222222222121201f1c171c1b191817151413110d080c0a070604010000000000000000000000000000000000000001050707080e11141417191a181d202022222323232221201f1c181514120e09040000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2625221e18110a010000000000000000000000000000000406070c10131316181b181d2020212122222121201f1c17191513120f0b0600000000000000000000000000000000000000000000000000000000000000000000010407090e1214171c1f2021201d18130c04000000000000000000000000000000000000000000000000000000000000000000000000000306060b0f121315181a171c1f2021212222222120201d1819161413100c070300000000000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c060d141a1e21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2323201c160f080000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080d11131417171b1f20212122222121201f1c181b1a181513120f0b0607040100000000000000000000000000000000000000000000080f161c2022232d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2a2826292a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2323201c1610080000000000000000000000000000030b12181d1f202b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2625231e19171c2023242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c22211e1a140e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d252b30333439393939393939393939393939393939392c292c313435393939393939393939393939393939392e2d2a2c31343539393939393939393939393939393939392c29241d160d04000000000009121b22292e31323434343434343434343434343434343434343434343434343434343434343434343434343432312e29231b13090000000000000000000000000000000000000000000000020c151e262c31343539393939393939393939393939393931302d28221a12080000000000000000000000000000000000000008121a22282d30313939393939393939393939393939393837332e2820180e0400000000000000000000000000000000000000000000000000000000000000000000060c1012171c1f2022252824292c2d2e2e2f2f2f2e2d2d2b282329282625232221201d191a18171413100d070100000000000000000000000000000306080d11131417191e202123252724292c2d2e2f3030302f2e2d2c282322211e1a15100c0701000000000000000000000000000000000009131b23292e3132393939393939393939393939393939393939393939393939393939393939393939393939393932312e29231b130a00000000000000000000000206070c101313181c1f2023252724292c2d2e2e2f2f2e2e2d2b28222522201f1c17110f0a04000000000000000000000000000000000000000000000000000000000406080d1113141a1e2122282b2d2d2c29241d160d0400000000000000000000000000000000000000000000000000000000000000000305060c101213171b1f2022242723282b2d2d2e2e2f2e2e2d2c29242623201f1d1812100c06000000000000000000000000000000000000000007111a232a31353839393939393939393939393939393939392c29241d160f171f262a2d2e393939393939393939393939393939393939302f2c27211a11080000000007111a232a31353839393939393939393939393939393939392c29241d160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c1013191d20212422272b2d2e2e2f2f2e2e2d2c282328262522201f1c171413110d08050300000000000000000000000000000000000008111921272c2f3039393939393939393939393939393939393939393939393837343236373939393939393939393939393939393939393939393939302f2c27211a1108000000000000000000000000030d151d24292c2d3839393939393939393939393939393933322f2a2322282d3031393939393939393939393939393939392e2d2a261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131d262f363c404146464646464646464646464646464646463935373d4042464646464646464646464646464646463b3936373d4142464646464646464646464646464646464639352f281f160c0100000006111b242d343a3d3e404040404040404040404040404040404040404040404040404040404040404040404040403f3e3a342d251b11070000000000000000000000000000000000000000000009141e2730373d41424646464646464646464646464646463e3c39332c241a1005000000000000000000000000000000000006101a242c33393d3e46464646464646464646464646464644433f39322a20160c0100000000000000000000000000000000000000000000000000000000000000070c11171c1f23282b2d2f32342f35393a3b3b3b3b3b3b3a3a38342e35343332302f2d2c292427252420201d18120c040000000000000000000000060b101213191d202124252a2d2e3032342f35393a3b3c3c3d3c3c3b3a38342e2e2d2b261f1d18120b0300000000000000000000000000000006111b252d343a3e3f46464646464646464646464646464646464646464646464646464646464646464646464646463f3e3a352d251b11070000000000000000030a0f1214181c1f2023282c2d2f32342f35393a3a3b3b3b3b3a3938332d322f2d2b28221c1b150f0a04000000000000000000000000000000000000000000000105070c101313191d2021252a2d2d3338393a39352f281f160c010000000000000000000000000000000000000000000000000000000000060b0f1213171c1f2022272b2d2f31332e34383a3a3b3b3b3b3b3a39352f33302d2c29241f1c17110c070100000000000000000000000000000000030e19232c353c4145464646464646464646464646464646464639352f281f17212931363a3b4646464646464646464646464646464646463d3c38332c231a0f050000030e19232c353c4145464646464646464646464646464646464639352f281f160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f24292c2d312d3337393a3b3b3b3b3a3a38342e3533312f2d2b282221201d1913120f0b06000000000000000000000000000000050f19232b33383c3d46464646464646464646464646464646464646464646464543403e424346464646464646464646464646464646464646464646463d3c38332c231a100500000000000000000000010b151f272f35383a45464646464646464646464646464646403e3b352e2c33393c3d464646464646464646464646464646463b3a36312a21180e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a252f3841484c4e5353535353535353535353535353535353454141484d4e5353535353535353535353535353535353464142494d4f535353535353535353535353535353535345403a31281d13070000010c18222d363f454a4b4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4a463f372d23180d01000000000000000000000000000000000000000004101b26303942494d4f5353535353535353535353535353534a49453e362c22170c00000000000000000000000000000000000c17222c363e45494b535353535353535353535353535353514f4b443c32281d12060000000000000000000000000000000000000000000000000000000000030b12181c23282c2e34383a3c3f41434145474848484848484746443f434241403e3d3c3a39352f3432302d2c29241d160d040000000000000003090e11171c1f2025292d2e313036393b3d3f4143404547484949494949484644403f3b3a37312c29241d150d0802000000000000000000000000010d18232d373f464a4c53535353535353535353535353535353535353535353535353535353535353535353535353534c4a463f372d23180d01000000000002080d151a1f2123282c2d2e34383a3c3f414240454747484848484746443f413f3c3938332d2b27201b150c070000000000000000000000000000000000000002080d1113181c1f2024292c2d31363a3b3f44464745413a31281d1307000000000000000000000000000000000000000000000000000000020a11171b1f2023282c2d2d3337393b3e40423f4446474748484847474540423f3d3a38352f2c28231c18120b0300000000000000000000000000000009141f2a353e474d51535353535353535353535353535353535345403a31281f29333b4246485353535353535353535353535353535353534a48443d352c21160b000009141f2a353e474d51535353535353535353535353535353535345403a31281d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000001080c151c23282c2f35393a3d403f44464748484848474645404341403e3c3938332d2d2c2924201f1b17110a02000000000000000000000000000b16212b353d44484a535353535353535353535353535353535353535353535352504b4a4e5053535353535353535353535353535353535353535353534a48443d352c21160b0000000000000000000007121d273139404547525353535353535353535353535353534c4b464037363e44494a535353535353535353535353535353534846423b332a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202b36414a53585a606060606060606060606060606060605f524c4b53595b606060606060606060606060606060605f524c4b54595c606060606060606060606060606060605f514b433a2f24180d010005111d29343f485056585a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a585651493f34291e120600000000000000000000000000000000000000000915212c37424b54595c606060606060606060606060606060575550483e33281c110400000000000000000000000000000005111d28333e485055576060606060606060606060606060605e5c564e44392e23170b00000000000000000000000000000000000000000000000000000000060c151d23282e34383a3f4446494b4e504c51545455555555545453504a504f4e4c4b4a4847454142403f3d3a39352f281f160c010000000000060e151a1c23282b2d3035393a3d404146474a4c4d4f4b51535555565656555453514a4c4847423c38352f271f19130c05000000000000000000000006121e29343f495156586060606060606060606060606060606060606060606060606060606060606060606060606060595751493f35291e120600000000050d141920262b2e2e34383a3d404546494b4e4f4b515354545555545453504a4e4c4846443f3837322b272018120b0300000000000000000000000000000000050c13191d2023282c2d2f35393a3d4246484a505354514b433a2f24180d0300000000000000000000000000000000000000000000000000020b141b22272b2d2e34383a3c3f4446484b4d4f4a505354545555555453514b4f4c494745403a38342e29231d150d0700000000000000000000000000000d1925313c4750585e5f6060606060606060606060606060605f514b433a2f26313b454d535f60606060606060606060606060606060606056554f473d33271c1004000d1925313c4750585e5f6060606060606060606060606060605f514b433a2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191e262e34383a4145474a4d49505354545555545453514b504e4d4b4846443f3e3a3935302d2b27221b140b02000000000000000000000004101c27333d474f545660606060606060606060606060606060606060606060605e5c56555b5d606060606060606060606060606060606060606060606056554f473d33271c10040000000000000000000c18242f39434b51535e60606060606060606060606060606059575149403e485055576060606060606060606060606060605f55534d453b31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824303c48535c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d56535d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5e56545d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4035291d1104000915212e3a45505a62656767676767676767676767676767676767676767676767676767676767676767676767676765625b51463a2e22160900000000000000000000000000000000000000000c1925313d49545d65686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c64615a5045392d2114080000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6760564b3f33271b0e0200000000000000000000000000000000000000000000000000020a11171e272e34383f44464a505355585b5d555d6061616262626160605c545d5c5b5958565554514c4f4d4b4a4745403931281d120700000000060f181f262b2e34383a3c4146474a4d4c525456585a5c555d6061626363636261605c545955534d47454039312a251e160e06000000000000000000000915222e3a46515b62656c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e221609000000050e171e252a31373a3b404546494b515356585a5c555d60616162626161605b545b585553504a47433c373228231c150c040000000000000000000000000000050e171e252a2d2e34383a3d4145474a4d5354545b60605d554b41352920150a000000000000000000000000000000000000000000000000000a141d262d3337393c3f44464949505355575a5b545c60606161626161605d555c595653514b46443f38342f271f18120b03000000000000000000000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b40352a36424d575f6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6360594f44382c20140700101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4035291d11040000000000000000000000000000000000000000000000000000000000000000000000000000050d161e242930383f44464c5254575a535b60616162626161605c555d5b59585553504a4a4745413c3937332d261d140a00000000000000000000000713202c38444f5960636c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b68605f666a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6361594f44382c201407000000000000000004101d2935404b555d606b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c66635b514244505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c615f574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404c58646e747979797979797979797979797979797976685d59656f757979797979797979797979797979797976685e59656f757979797979797979797979797979797976675d5145392c201306000b1724313d4a56626c7173737373737373737373737373737373737373737373737373737373737373737373737373726d62564a3e3125180b00000000000000000000000000000000000000020e1b2834414d59656f75797979797979797979797979797979716c6155493c3023170a0000000000000000000000000000000a1723303d4955616c717979797979797979797979797979797772675c4f43372a1d1104000000000000000000000000000000000000000000000000020b141b2227303940454a5053545c60626567696b676d6e6e6e6e6e6e6d6d666b6a686766656362605d555c5a585753514b43392f24180d010000030e18212a3137383f4446494c5254575a565e61636567696a676d6e6f6f706f6f6e6d666865615f5753514b433e36302820180f060000000000000000000b1824313e4a56626d727979797979797979797979797979797979797979797979797979797979797979797979797979726d62574a3e3125180b0000020d17202930363c4347484b515356545c60626567696a676d6d6e6e6e6e6d6c666a676562605b54544e47433d342e271e160d04000000000000000000000000020c1720293036393a404546494c525457575e6165666c6d675d51453c31261b0f03000000000000000000000000000000000000000000000006111b262f383f4446494a505356535b60626466686a666d6d6e6e6e6e6e6d676a686663605d5553504a4540393128231c150c040000000000000000000000121f2b3845515e6a747979797979797979797979797979797976675d5145392d3a46535f6976797979797979797979797979797979797979706b6055483c2f23160900121f2b3845515e6a747979797979797979797979797979797976675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000050e171f282f353e424a5053565d60646769656c6d6e6e6e6e6d6d676b6968666462605b545754524c4946443f382f261b1106000000000000000000000916222f3c4854606b7079797979797979797979797979797979797979797979797872686671767979797979797979797979797979797979797979797979706b6155483c2f231609000000000000000006131f2c3845515d676d78797979797979797979797979797979736d63544a4955616c70797979797979797979797979797979796e695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a677480868686868686868686868686868686867a6d605b687581868686868686868686868686868686867a6e615c68758186868686868686868686868686868686796d6053473a2d201407000b1825323e4b5865717e808080808080808080808080808080808080808080808080808080808080808080808080807f7265584c3f3225190c00000000000000000000000000000000000000020f1c2935424f5c6875818686868686868686868686868686867e7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e86868686868686868686868686868684776b5e5144382b1e11050000000000000000000000000000000000000000000000000a141d262d333c434b51545c6064666d6f72747678797a7b7b7b7b7b7b7a7978777675747371706f6d676a68676563605d554b4035291d1004000009151f2a333c42474a505356565e61646669686e7072747677797a7b7c7c7c7c7c7b797875726e6965605d555046413a322a21180f0600000000000000000c1925323f4c5865727f86868686868686868686868686868686868686868686868686868686868686868686868686867f7265594c3f3226190c000008141e29323b41464e5355545c606366666d6f72747577797a7a7b7b7b7b7a79787674726f6c66626058544e44403930281f160d03000000000000000000000008131e29323a4146474b515356565d606467696e7175797a6d60584e43372b1f140900000000000000000000000000000000000000000000000b17222d384149505355545c606366656c6e7173757678797a7a7b7b7b7a7a78777572706d6764605c54514b433e342e271e160d040000000000000000000013202c3946535f6c7986868686868686868686868686868686796d6053473a2e3b4855616e7b8686868686868686868686868686868686867d7063564a3d3023170a0013202c3946535f6c7986868686868686868686868686868686796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000040d172029313a414550545c6064686d70737678797a7b7b7b7b7a797978767473716f6c666764605d565553504941382d22170b000000000000000000000a1723303d4a5663707d86868686868686868686868686868686868686868686868478656a768386868686868686868686868686868686868686868686867d7063564a3d3023170a00000000000000000714202d3a4753606d79858686868686868686868686868686867f73665c504e5864707e868686868686868686868686868686877b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9393939393939393939393939393877a6d605b6875818e9393939393939393939393939393877a6e615c6875828f9393939393939393939393939393867a6d6053473a2d20140700101c2936434f5c6976828d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d83776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f939393939393939393939393938a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a939393939393939393939393939184776b5e5144382b1e1105000000000000000000000000000000000000000000000006111b262f383f444e555c60666d7075797c7e8183848687878888888887878685848382817f7e7d7b7a7877757372706d675d5145392c20130600020e1a26313c454d53545c606266686d707376787a7d7f8082848586888889898988878684827f7b77716d67615a524c443c332a21180e04000000000000000c1925323f4c5865727f8b9393939393939393939393939393939393939393939393939393939393939393939393938c7f7265594c3f3226190c00010d1925303b444c52585f6265666d707376797c7e8182848586878788888787868583817f7c79746f6a626058514a423a31281f150b01000000000000000000010d1925303a444c5254545c606366686d7074777b7e828582756a5f53473b30251a0e02000000000000000000000000000000000000000000030f1b27333f49535b606265666d6f7376797b7e8082838586878788888887868584827f7c7975716d66605c554f44403930281f160d0400000000000000000013202c3946535f6c79869293939393939393939393939393867a6d6053473a35404b5565727f8b9393939393939393939393939393939285796d6053463a2d2013070013202c3946535f6c79869293939393939393939393939393867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000010c161f29323a434c525a61666d71767a7d808284868787888887878686848381807e7b797673716d686662605b53493f33271b0f030000000000000000000c1925323f4c5865727f8b9393939393939393939393939393939393939393939286796c657884919393939393939393939393939393939393939393938b7f7265584c3f32251908000000000000000006131f2c3845515d67727f8c979393939393939393939393939184786d6053545f6a768390939393939393939393939393998e8174695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f93877a6d605b6875818e9b9f9f9f9f9f9f9f9f9f9f9f9f94877a6e615c6875828f9b9f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a2d20140700101c2936434f5c6976828f9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9b9f9f9f9f9f9f9f9f9f9f9f978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a979f9f9f9f9f9f9f9f9f9f9f9e9184776b5e5144382b1e110500000000000000000000000000000000000000000000091217222d384149505860676d72797d8185888b8e909192999494959595949a939291908f8e8c8b898887858482807e7d796d6053473a2d2014070006121e2b37424d575f61666d6f73777a7d80828587898b8d8f9192989495969696959993918e8c88837e79716c615e564d453c332a20160c020000000000000c1925323f4c5865727f8b989f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988c7f7265594c3f3226190c0005111e2a36414c565e616a6e7275797c808386898b8d8f9192989494959594999291908e8b8885807c766f6a605c544c433a31271d120700000000000000000005111d2a36414c565e6165666d7073767a7d8184878b8e92877c6f62574d42362a1e130800000000000000000000000000000000000000000005121f2b3744505b656c6f7275797c7f8385888a8d8e9091939994949594949792908f8c8985827d79726d676159514a423a31281f160b02000000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a3945515d6776828f9c9f9f9f9f9f9f9f9f9f9f9f9fa89a8d8074665c5044382b1f12060013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000007121d28313a444c565d606c70787d82868a8d8f9192999495959494999291908e8c8b888583807d7a76736f6c655b5044372b1f12050000000000000000010e1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa399877a6d6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8d8174675a4e413024190d010000000000000004101d2935404b55606d7985929ea99f9f9f9f9f9f9f9f9fa1968a7d70645756626f7c88949f9f9f9f9f9f9f9f9f9f9f9f92867b6e61574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7acacacacacacacacacaca093877a6d605b6875818e9ba8acacacacacacacacacaca194877a6e615c6875828f9ba8acacacacacacacacacaca093867a6d6053473a2d20140700101c2936434f5c6976828f9ca6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8acacacacacacacacaca4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4acacacacacacacacacaa9e9184776b5e5144382b1e1105000000000000000000000000000000000000000000050e1b2427333f49535b606a6f797f848a8e9297989a9c9e9fa3aba1a1a1a1a1a49f9f9e9d9b9a999896959792908f8d8b897c6f6256493c2f231609000814212d3a47535f696e75797c8083868a8d8f929796989a9c9d9fa2aaa2a2a3a2aba49f9e9b9895908b847e756d685f574d453b32281e13080000000000000c1925323f4c5865727f8b98a5acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca5988c7f7265594c3f3226190c000714202d3946525e686e787b7e8285898c909298989a9c9d9fa2aaa1a1a1aba39f9e9d9a9897918d88827c746d665d564c43392f24180b0200000000000000000713202d3946525e686d7275797c8083868a8d9196989b9a8e8174695e52463a3024190d0100000000000000000000000000000000000000000613202d394653606c777c7f8285898c8f929897999b9d9e9fa4a1a1a1a1a9a29f9d9b9998928e8a847f79706b605c544c433a31281d140a000000000000000013202c3946535f6c7986929facacacacacacacacacaca093867a6d6053473a3a4753606d7a86929facacacacacacacacacacacaca196897c6f63544a3f34281c10030013202c3946535f6c7986929facacacacacacacacacaca093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000020b18242f39434c565e686d757d848a8f92999a9c9e9fa3aba1a1a1a0a39f9e9c9b99979892908d8a86837f7c776c605346392d201306000000000000000004111d2935414c566976838f9ca9acacacacacacacacacacacacacacacacacb5ab95887b6f6d7a8799a3aeacacacacacacacacacacacacacacacacaca99c90837669564c4135291d110500000000000000000c18242f3945515d67737f8c97a2adacacacacacacacb2a89c8f8276695f5e6875818e9ba6b0acacacacacacacaea3988d8174695e53453b31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4b9b9b9b9b9b9b9b9ada093877a6d605b6875818e9ba8b4b9b9b9b9b9b9b9b9ada194877a6e615c6875828f9ba8b5b9b9b9b9b9b9b9b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5b9b9b9b9b9b9b9b0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1b9b9b9b9b9b9b9b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000020c17202c363e44505b656c727c848b91969b9fa2a9a7a9abacafb5aeaeaeaeb6afacabaaa9a8a7a6a4a3a9a29f9d9b9a95897c6f6256493c2f231609000815222e3b4855616e7b8285898c90939a999c9ea1a9a5a7a9aaacaeb4afafafafb5afacaba8a7a09d96918b827a6e695f574d443a3024190c0200000000000c1925323f4c5865727f8b98a5b2b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b2a5988c7f7265594c3f3226190c000814212e3b4754616e7a85888b8f9298999c9fa3aaa7a8aaacaeb4aeaeaeb5afacaba9a7a9a19e9a948f8780786d685d554b4035291d140a00000000000000000714212e3a4754616d7a7f8285898c9092999a9ea0a8ac9f92867b6e61564c4135291d120700000000000000000000000000000000000000000c1925323f4c5865727f888c8f9298999c9fa2aaa6a8a9abacafb5aeaeaeb3adabaaa8aaa29f9b96918c847d746d665d564c433a2f261c11060000000000000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d6053473a3d4a5763707d8a98a3aebab9b9b9b9b9b9b9b9b7ab9e9184786b605442382e23170b000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000a141d2935404b555e686d7a818a91969c9fa3aba9abacaeb5aeaeaeb5afacaba9a7a6aaa29f9c9a9992908c887e7164584b3e3125180b00000000000000000613202c3945525d687885919eabb8b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b0a396897d706f7c8895abb5bfb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8ab9e928578685d5246392d201307000000000000000007121d2935404b55606d7a85929faab4beb9b9b9b9b9b9ac9f93877b6e62616e7b86929facb9b9b9b9b9b9bfb4aa9f92867b6e61574d42332a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0c6c6c6c6c6c6baada093877a6d605b6875818e9ba8b4c1c6c6c6c6c6c6baada194877a6e615c6875828f9ba8b5c2c6c6c6c6c6c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2c6c6c6c6c6bdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdc6c6c6c6c6c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000000000008131e29323e48525c606c777f8791969ea1a8abadb3b4b6b7b9bbc0bbbbbbbbc0bbb9b8b7b6b5b4b2b1b0b3adabaaa8a295897c6f6256493c2f231609000915222f3c4855626f7b889298999d9fa4aca9abadb3b2b3b5b7b8babfbbbcbcbcc0bbb9b7b5b1aca8a19e948f847b6e695f564c4135291e140a00000000000c1925323f4c5865727f8b98a5b2bec6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6bfb2a5988c7f7265594c3f3226190c000714212e3a4754616d7a8797989b9fa2aaa9acaeb4b4b5b7b8babfbabbbbc0bbb9b8b6b4b3adaba69f99938d827a6d675d51453d2f261c1106000000000000000714212e3a4754616d7a858f9298999d9fa3abaaacb2aea3998d8073685d5246392f24180c00000000000000000000000000000000000000000a1724313d4a5764707d8a979c9fa2aaa9acaeb4b3b5b6b8b9bbc0bbbbbbbebab8b7b5b4aeaca8a19e96918a80786d685d554c42382d22170b0200000000000013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d6053473a434e586774818d9aaab4bfcbc6c6c6c6c6c8bcb1a7998d807366594f4330261c1106000013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000006111b262f3845515d676d7a838e939da0a8acafb5b5b7b9bbbfbbbbbac0bbb9b7b6b4b3b4aeaca9aba39f9c978b7e7164584b3e3125180b00000000000000000714212d3a4754606d7a8797a1adb9c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6beb1a4978b7e71707d8a96a3b0bdd1c6c6c6c6c6c6c6c6c6c6c6c6c6c6b9ada197877a6d6154473a2e2114070000000000000000010d18242f3945515d6773808c98a2aebac6d0c6c6c8bbafa49a8d8074676773808c99a3aebac7c6c6c6c7baaea2988d8074695e52453b3121180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cdd2d2d2d2c6baada093877a6d605b6875818e9ba8b4c1ced2d2d2d2c7baada194877a6e615c6875828f9ba8b5c2ced2d2d2d2c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc3b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2ced2d2d2cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad2d2d2d1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000000010d1925303a44505a636e74808c9299a0a8adb2b8babec1c3c4c5c7cbd1c8c8d2ccc8c6c5c4c3c2c1bfbebcbebab8b7afa295897c6f6256493c2f231609000714202d3a4753606d7a86939faaaaacafb6b5b8b9bebec0c2c4c5c6cad0c9c9d2ccc7c6c4c1bcb8b2ada69e9691857b6e685d52453e30261c1106000000000c1925323f4c5865727f8b98a5b2becbd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cbbfb2a5988c7f7265594c3f3226190c000713202d3a4653606d798699a3a8acaeb4b6b8babfc0c2c4c5c7cad0c8d1cbc7c5c4c3c1beb9b8b0aba49f949082796d60594f42382d22170b000000000000000713202d3946525e6873808d98a2aaa9acafb5b7b9bdb5ab9f92857a6d61554b4035291c1106000000000000000000000000000000000000000916222f3c4955626f7c8895aaabaeb3b6b8babfc0c1c3c4c6c7ccd2c8d0cac6c5c3c2bfbab8b2aca8a09e928d827a6d675d544a3f33281d140a00000000000013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d6053473a47535f6a7884919eabb7c4d0dcd2d2d2d1c5b8aca095887c6f6255483d3222140a00000013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d6053473a2d2014080706030000000000000000000000000000000000000000000000000000000000000b17222d38414f59606d798390959ea5acb2b9bbc0c2c4c5c7cbd1c8d1cbc7c5c4c3c1bfbfbab8b6b5afaca4978a7e7164574b3e3124180b00000000000000000916232f3c4956626f7c8995a9b2bec9d5d2d2d2d2d2d2d2d2d2d2d2d2ccbfb2a5998c7f72717e8b98a4b1becbd2d2d2d2d2d2d2d2d2d2d2d2d5c9beb3a996897c6f6356493c3023160900000000000000000007121d2935414c55616d7a85929faab4bfcad6d8ccc0b6ac9f9285796d6d7985929eabb4bfcbd7d6cabfb4aa9f92867b6e61574d4233291f0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddadfdfd3c6baada093877a6d605b6875818e9ba8b4c1cedbdfdfd4c7baada194877a6e615c6875828f9ba8b5c2cedbdfdfd3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc3b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbdfd7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7dfddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000005111d2a36414c56616c73808c929fa3abb2b9bdc4c6cad0cfd1d2d3d7dcd4d4ddd8d4d2d2d1d0cecdcccbd0cac6c5bcafa295897c6f6256493c2f2316090006131f2c3845515c677884919eabb7b9bbc0c2c5c6c9cfcdcfd0d2d3d6dbd5d6ddd7d4d2d1cdc8c4bdb9b0a8a19791847a6d605a5042382e23170b000000000c1925323f4c5865727f8b98a5b2becbd8dfdfdfdfdfeae2dcd6d3d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cbbfb2a5988c7f7265594c3f3226190c0006131f2c3845515c667986929facb8babfc3c5c7cbd0cfd0d2d3d6dbd4dcd7d4d2d1d0cfc9c6c2bdb5afa69f948e81746b60544a3f33281c0f0300000000000005111d2a36414c56616e7b86929fabb5b9bbc0c4c5c6baaea2988c7f73675d5145382e23170b000000000000000000000000000000000000000714212e3a4754616d7a8798a2aebabec2c5c6cad0ced0d1d2d4d7ddd4dbd6d3d2d0d0cac6c4bdb9b2aca49d949083796d665b50443d2f261b1106000000000013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053473c4855626f7b8896a1acb9c5d2e2dfdfddd0c3b7aa9d9084776a5f53473a2e21150200000013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053473a2d2015151312100b06070604000000000000000000000000000000000000000000000000030f1b27333f4953616b75818e95a0a7afb8bdc3c7cbd1d1d2d3d7dcd4dcd7d3d2d1cfced0cac6c5c3c0bbb0a4978a7d7164574a3e3124170b00000000000000000b1825313e4b5864717e8b97a4b1becfdae6dad3cecbcac9cacbcfd4dacdc0b3a79a8d8074737f8c99a6b2bfccd9d5d0cccbc9cacbced3d9e6dacfbeb1a4988b7e7165584b3e32251807000000000000000000010d19242f3a46525d6873808d98a2aebac6d0dcd2c7baada2978b7e71717e8b97a1adbdc6d1dcd3c6baaea2988d8073685e52453b3021170d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d605b6875818e9ba8b4c1cedbe7e0d4c7baada194877a6e615c6875828f9ba8b5c2cedbe8e0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b6aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000000000713202d3946525e68717e8a929ca4aeb5bdc3c9cfd3d6dbdcddd8d4d2d1cfcfcecececed1d2d5dadad9d7dbd6d3c8bcafa295897c6f6256493c2f2316090004101c2934404b556976828f9ca9b5c2c8ccd2d1d2d4d2d2d1d0cfcfcfcfcfd0d2d4d7ddded9d4cfc9c1bab2a9a0968e81756c61544a3f34281c10030000000c1925323f4c5865727f8b98a5b2becbd8e5ececf4eae0d8d0cbc7c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5bfb2a5988c7f7265594c3f3226190c0004101c2834404b546b7885929eabb8c5cad0d2d3d6d3d2d2d1d1d1d1d2d3d7dcdfdedcdad5d2d0c7c0bbb0a69d92897d70665b5044382b1f1207000000000000010d1925303a46525e6974818d99a3afbbc7cbd1d2cabfb4aa9e9285796d60544a3f34281c10030000000000000000000000000000000000000713202d3946525e687985929facb8c5d0d2d3d6d4d2d1d1d0cfcfcfcfcfd1d2d5d9dbd6d3cec9c4bdb9aea69f958f82786c60584e41382d22170b000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347414c5666727f8c99a8b2bdc9d5e1ece0d4c7bcb1a7998c7f7266584e43372b1f120600000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d232221201f1c17171313100c070000000000000000000000000000000000000000000005121f2b3744505b65707d8a939ea7b1b9c1c8ced3d7d9d5d2d1cecdcdcccccccccccdcdcdcececfd1cbbdb0a3978a7d7064574a3d3124170a00000000000000000d1a2733404d5a6673808d99a6b3c0ccd9d8cfc8c2bebdbcbebfc3c8d0cec1b5a89b8e827574818d9aa7b4c0cdd1c9c4c0bfbcbdbec2c8cfd8d9cdc0b3a69a8d8073675a4d402e23180c0000000000000000000008131e2935414c56616d7a86929faab4bfcbd6d6cabeb3a99d9083777784919da9b3becfd8d6cabeb4aa9f92867a6d61564d4133291f0f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d605b6875818e9ba8b4c1cedbe7e0d4c7baada194877a6e615c6875828f9ba8b5c2cedbe8e0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4aa9d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000006121f2b37434e58616d7a85929ea4aebbbfc6cfd5dadfdcd7d4d2ccc8c6c4c3c2c2c2c2c2c4c5c9cfd6dee8e6e2d5c8bcafa295897c6f6256493c2f23160900000c18232f414e5a6774818d9aa7b4c0cdcbcad2ccc8c6c5c4c3c3c2c2c2c2c3c6c7ccd2d9e2e0dad5ccc4bbb2a89e938a7d70665c5044382b1f14090000000c1925323f4c5865727f8b98a5b2becbd8e5f1f8ede2d8cec6bfbab8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b2a5988c7f7265594c3f3226190c00000c18232e44515e6b7784919eaab7c4cbcac9d1cbc7c5c5c5c4c4c5c5c7cbd1d1d4d9dfe1dfd9d2ccc2b8afa59d9083786c605346392f24180c0000000000000008131e2a36424d56616e7b87929fabb5c0ccd7dbd0c5b9ada1978b7e72665c5044382b1f160b00000000000000000000000000000000000005111d2a36414c566a7784919daab7c4cccad1cbc7c5c5c4c3c3c2c2c2c3c4c5c9ced2d5dadad5cec9c0b8b0a79f948c80736a6053493f33271b0f030000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534745525d687683909ca9b6c3cedae5eaddd1c4b8ab9f95887b6e6155483c31261b0f0300000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a302f2f2e2d2b282323201f1c1812100b05000000000000000000000000000000000000000613202d394653606c7884919da5afb9c3cbd4d9ded5cec9c5c4c1c0c0c0bfbfc0c0c0c0c1c1c2c2c3c3bdb0a3968a7d7063574a3d3024170a0000000000000004101c2834404a546875828f9ba8b5c2cedbcfc6bdb6b2b0afb1b2b7bec6cfc3b6a99c90837675828f9ba8b5c2cec7bfb8b4b2afb0b2b6bdc6cfdbcfc2b5a89c8f827569554b4034281c1004000000000000000000010d1924303a46525e6873808d98a3aebac6d1dbd0c5b8aca095897d7d8995a0acbbc5cfdfd3c6baaea2988d8073685e52443b3021170d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae0e0d3c6baada093877a6d605b6875818e9ba8b4c1cedbe0e0d4c7baada194877a6e615c6875828f9ba8b5c2cedbe0e0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79d9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000815212e3a47535f6a75818e97a1adb6bfcbd1d8e1e1d9d1cbc7c5c0bbb9b8b6b5b5b5b5b5b7b9bdc4ccd6e0ebe2d5c8bcafa295897c6f6256493c2f2316090000071925323f4c5865727f8b98a5b2bec0bfbdbcc0bbb9b8b7b6b6b6b5b5b5b7b9bbc0c7d0d2dae5ded6cdc3baafa59d9184786d6053463b30251a0e0200000c1925323f4c5865727f8b98a5b2becbd8e3ecf3e7dcd0c6bcb4aeacacacacacacacacacacacacacacacacacaca5988c7f7265594c3f3226190c0000071e2a3744515d6a7784909daab7c0bfbdbcbbbfbab9b8b8b8b7b8b9bbbfc3c4c8cdd5dde5e3ddd7cac0b8aca0958a7d7063554b4035291d1004000000000000020e1925303b46535f6974818e99a4afbbc7d4e0d5c9beb3a99e9184786d6053463d33271c10040000000000000000000000000000000000010d192530434f5c6976828f9ca9b5c0bfbebcc0bbb9b8b7b6b6b5b5b5b6b7b9bdc4c5c9cfd6ded9d5cac2b9b0a69f93877c6f655b5044372b1f160a0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474754606d7a86929facb9c5d2dfece3d7cbc0b5ab9d908376695f53463a2a20150a0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473d3c3c3c3b3a38342e302d2c28231d1c16100b050000000000000000000000000000000004111d2935414c5664707d8a96a0acb7c1cbd5ddd9d0ccc4bdb9b7b4b3b3b3b3b3b3b3b3b4b4b4b5b5b6b7b7b0a396897d7063564a3d3023170a0000000000000006121f2c3844515c667784919daab7c4d0d3c8bdb4aca6a3a2a4a6acb4bec8c4b7aa9e9184777683909da9b6c3c9bfb5ada7a5a2a3a6abb4bdd0d9d1c4b7aa9e918477675c5145382c1f13060000000000000000000008131e2a36414c56616e7b86929fabb5bfcbd7d4c8bcb1a79b8e81828f9ca7b1bccdd7d6cabeb3a99f92857a6d61564c4132291f0f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cdd4d4d4d3c6baada093877a6d605b6875818e9ba8b4c1ced4d4d4d4c7baada194877a6e615c6875828f9ba8b5c2ced4d4d4d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9083776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000005111d2935414c56626f7c88939ea9b3bec8d7dce3ded6cfc7c0bbb9b6afacaba9a9a8a8a8a8abadb2bac4cfdae5e2d5c8bcafa295897c6f6256493c2f23160900000a1724303d4a5763707d8a96abb5b5b3b2b1afb6afacababaaa9a9a9a8a8aaacafb5bdc0c8d1d9e3dfd5ccc1b8aca0958a7e7164574d42362a1e120500000c1925323f4c5865727f8b98a5b2bec8d1dae8eee3d6cbbfb4aaa39f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988c7f7265594c3f3226190c0003101d2a3643505d697683909ca9b5b3b2b1afaeb4aeacabababababacaeb5b6b8bcc3cbd3dbe5e8dcd4c8bcb1a79b8f8275675d5145382c1f13060000000000000009141f2a36424d57626e7b87939facb9c1ccd7dacfc5b9aca0968a7e7164594f44382c20150a000000000000000000000000000000000000081b2834414e5b6774818e9aa7b4b4b2b1b0b5afacabaaa9a9a9a8a8a9aaacb2b7b9bdc4ccd2dbdcd4cbc2bbafa4999083786c6053463d32271b0f0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474a5464717e8a99a3afbbc7d3e0ede0d4c7bbafa3998b7f7265574d42362a180e040000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605349494949484846443f403d3a38342e2c27211c160d080200000000000000000000000000000713202c3945525d6875828f9ca8b2bdc9d3dddcd0c7bebab2acaaa8a7a6a6a6a6a6a6a6a7a7a8a8a9a9aaababa396897d7063564a3d3023170a000000000000000713202d3a4653606d7986929facb9c5d2cec2b6aca29a9796979ba2acb7c3c5b8ac9f9285797885919eabb8c4c4b8ada39b9896979aa2abbec7d2d2c6b9ac9f9386796d6053463a2d20130700000000000000000000020d1925303a46525e6874808d99a3aebbc7d1d9cdc3b9ac9f928687939facb9c3cedfd3c6baada2978c8073685e52443a3020170d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0c7c7c7c7c7c6baada093877a6d605b6875818e9ba8b4c1c7c7c7c7c7c7baada194877a6e615c6875828f9ba8b5c2c7c7c7c7c7c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d83776a5d5044372a1d1100000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000713202d3946525d6874818e9aa5afbbc5cfdae7dfd6ccc4bdb5afacaca49f9e9c9c9b9b9b9b9ea1a8b2bdc9d5e1e2d5c8bcafa295897c6f6256493c2f23160900000815222e3b4855616e7b8899a3aaa8a7a5a4a3aca49f9f9e9d9c9c9c9c9c9d9fa4abaeb6bfc7d1dde7ded4c8bdb1a89c8f8376695e52463a2d20140700000c1925323f4c5865727f8b98a4aeb6bfc8d8dde4e0d3c7baaea39892929292929292929292929292929292929292928c7f7265594c3f3226190c00030f1c2936424f5c6975828f9ca8a8a7a5a4a3a2aba39f9f9e9e9e9e9fa3abaaacb1b9c1c9d3dfe9e4d9cec3b8ac9f9286796d6053473a2d20140700000000000000020e1a26313b47535f6a75828e9ba6b0bbc7d3ded5c9bdb2a89d9083776b6054483c32271b0f0300000000000000000000000000000000000d192633404c5966737f8c99a6a9a7a5a4a3aba39f9e9e9d9c9c9c9c9c9ea0a8abadb2bac1c9d2dbddd7ccc0b5ab9f958a7e7164594f43382c1c110600000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347505b6674818e9babb5c0cbd7e3ecdfd2c5b9ac9f92867a6e6154473b31261a08000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605656565656555453504a4d4a4645403938332c282119140d05000000000000000000000000000714212d3a4754606d7a86929facb9c3cedfddd3c9beb5aca8a09e9b9a9a99999999999a9a9a9b9b9c9c9d9e9fa296897c706356493d3023160a000000000000000815222f3b4855626e7b8899a3afbbc7d3cbbeb2a69a908a898b909ba6b2c5c6baaea298877a7986929facb9c5c0b4a79b918c898a909aacb6c0ccd4c7bbafa499887b6f6255483c2f221509000000000000000000000008131e2a36414d56616e7b86929fabb5c0cbd7d3c7bbaea39992939aa4afbbc8d4d6cabeb3a99f92857a6d60564c4132291e0e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7b4babababababababaada093877a6d605b6875818e9ba8b4babababababababaada194877a6e615c6875828f9ba8b5bababababababab9ada093867a6d6053473a2d201407000c1925323f4c5865727f818181818181818181818181818181818181818181818181818181818181818181818181817f7266594c3f3326190c00000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000714212e3a4754616d7a86929facb8c1cdd7e1e1d7cdc4bab2aba39f9b9a9391908f8f8f8f8f9196a1adb9c5d2dfe2d5c8bcafa295897c6f6256493c2f23160900000713202d3a4653606d7986929f9d9b9a989796959a93929190908f8f8f8f9093999da4adb5bfcbd5dfe5d9cec3b7ab9f94877b6e6154483b2e21150700000b1825313e4b5864717e8b929ca4adb6bfccd2d9dfd2c5b8ac9f928686858585858585858585858585858585858585867f7265584c3f3225190c00020f1c2835424f5b6875828e9b9d9b9a9897969594999292929191929299989da0a7afb7c1cdd7e1eae0d3c7baaea398897d7063564a3d3023170a000000000000000009141f2b37434e58626f7c88949eaab7c2cdd8d9cec4b8aca095897d7063584e43372b1f140900000000000000000000000000000000000b1825313e4b5864717e8b979e9c9a999796959992929190908f8f8f909196989ea1a8afb7c1c9d3dfddd2c7bdb1a79d9083766b605448382e23170b00000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534753606c7985929eabb8c5d1dce8e3d7cbbfb4aa9c8f8276685e524639291f1409000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6363636363626261605c54595653514b48443d38332a251e170e070000000000000000000000000b1824313e4b5764717e8a99a3aebbc7d3e0d7ccc1b7aca39b96918e8d8d8d8c8c8d8d8d8d8e8e8f8f909091929794897c6f6356493c30231609000000000000000a1724313d4a5764707d8a97abb5c0cbd6cabeb3a9978a7e7c7e8b97a9b3becabfb4aa95887b7a8799a3afbbc7c0b6ac988c7f7c7e8a9aa4afbbc8d4ccc0b5ab978a7d7164574a3e312417060000000000000000000000020e1925303b46525e6974818e99a3afbbc7d2d7cbbfb5aba39f9fa4acb6c0ccd8d2c6b9ada2978c7f73685d52443a3020170d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa7adadadadadadadadadada093877a6d605b6875818e9ba8adadadadadadadadadada194877a6e615c6875828f9ba8adadadadadadadadadada093867a6d6053473a2d201407000b1824313e4a56626d7274747474747474747474747474747474747474747474747474747474747474747474747474726d63574b3e3225180c00000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000004101c2934404b5565727f8b98a2aebac7d3dfe6dbd0c5bbb2a8a199928e8a868483828282828284919eabb7c4d1dee2d5c8bcafa295897c6f6256493c2f231609000006121f2c3844505c6677849192908f8d8c8a89888786858483838382828284878d929ba3adb9c3cdd9e4dfd3c7bbb0a6988b7e7165584b3e2e23180c00000613202d394653606c77808d929ca4adbbc0c7d0d9d0c3b7aa9d90847b79797979797979797979797979797979797979726d62564a3e3124180b00010e1b2834414e5b6774818e92908e8d8c8a8988878686858585848586888b90959ea5afbbc5cfdbe6e3d6cbbfb4aa998c7f7366594c403326190d0000000000000000030f1a26313c47535f6a75828f9ca6b0bbc7d3dfd4c8bcb1a79c8f82766a6054473c31261a0e02000000000000000000000000000000000a1623303d495663707c8992918f8d8c8b89888786858483838282828384878b91969ea5afb7c1cdd6e1d9d0c2b8ab9f95897c6f63544a3f34281c1003000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534956626f7c8997a1adb9c6d2e3ece0d3c7baaea3988b7e7164564c41362a1e1105000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a70707070706f6f6f6e6d66696663605c55544f48443e3630292019100800000000000000000000030f1b27333f49536774818d9aabb5bfcbd7dfd2c6bbafa59b918b848180808080808080808181818282838484858687897c6f6256493c2f231609000000000000000d192633404c5966737f8c99a6b2bfd1d3c6baada29786796f7a8797a1adb9c6bcafa396897c7c8895abb5c0c8bbafa49a887b6f7986939facb9c6d2d2bfb2a6998c7f7366594c402d22170b00000000000000000000000008141f2a36424d57616e7b87929fabb5c0ccd7d1c6bdb5aeacacafb6bec7d2d5c9beb3a99e92857a6d60564c4132281e0e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9aa1a1a1a1a1a1a1a1a1a1a1a093877a6d605b6875818e9ba1a1a1a1a1a1a1a1a1a1a1a194877a6e615c6875828f9ba1a1a1a1a1a1a1a1a1a1a1a093867a6d6053473a2d201407000915222e3a46515b62656767676767676767676767676767676767676767676767676767676767676767676767676766635b51463b2f22160a00000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000006131f2c3845515c6776828f9caab4bfcad6e5e2d6cabeb3a9a1969187827d7a78767675757575818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f231609000003101c28343f4a5469758287858482807f7e7c7b7a797878777676767575777a808c919ba7b1bcc8d4e0e4d8cdc1b4a89b8e817568554b4034281c10040005121f2b3744505b656c74808c929ca3afb6bec7d0d1c4b8aca09590867f756d686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e22160900010d1a2734404d5a67738087858382807f7e7c7b7a7a797878787878797b7e838e939ea9b3becad6e2e7dcd0c1b5a89b8e8275685b4f4235281c0f0000000000000000000915202b37434e58636f7c89949fabb7c2cdd8d9cdc3b7ab9f94887c6f62574d42372b1e1408000000000000000000000000000000000815222e3b4855616e7b88868482817f7e7d7b7a797877767676757576777b7e848e939ea5afbbc4cfdae2d4c8bcb1a79a8e8174665c5044382b1f1206000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534c566673808c99a9b3bec9d5e2ecdfd2c5b9ac9f92867a6d6054473b3025190d01000000000013202c3946535f6c7986929facb9c5d2dfe3d6c9bdb0a3968a7d7c7c7c7c7c7c7c7b7b79787573706d67636059554f46413b322b221a110800000000000000000005121f2b3744505b657783909daab6c3d1dcdccfc3b6aa9e938b7f77757473737373737373747475757676777878797b7c7a6d6054473a2d211407000000000000020f1b2835424e5b6875818e9ba8b4c1ced2c5b8ab9f928578687885929eabb8c5bdb1a4978a7e7d8a96a3b0bdc6b9ac9f93867a6d7885929eabb8c5d1cec1b4a89b8e81756853493f33271b0f030000000000000000000000020e1a25303b46535f6974818e99a4afbbc7d2d8cfc6bfbbb9b9bbc0c7d0d9d2c6b9ada1978c7f72675d51443a2f20160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9494949494949494949494949493877a6d605b6875818e9494949494949494949494949494877a6e615c6875828f9494949494949494949494949493867a6d6053473a2d2014070006121e29343f495156585a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a595751493f352a1e120600000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000714202d3a4753606d7986929facb9c5d0dbe7dfd3c6baada29791847c75706d67696968686874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f2316090000000c17232e3b4854616e7b7a787775747271706e6d6c666b6a6969696969686e747f8c95a0acb8c4d1deeaddd0c4b7aa9d918477675c5145382c1f130600030f1b27333f49535b606e737f8c919fa4acb5bdc7cfc8bcb1a7a098928b827a706b605c5f5f5f5f5f5f5f5f5f5f5f5f585651493f34291e120600000814212e3b4754616e7a7a787775747271706f6e6d676c6b6b6b666d6e7178818e97a2adbac6d3dfe9dcd0c3b6a99d9083766a5d5043372a1d10000000000000000000030f1b26323c4854606b76828f9ca7b1bcc8d4dfd3c7bbb0a69b8e8175695f53463b3025190d010000000000000000000000000000000713202d3a4653606d787b797776747271706e6d6c656b6a6969696969696e7279818e939ea9b3bec9d5e1d8cdc2b8ab9e9285796d6053463a2d201306000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053525e687783909daab6c3cfdae6e2d6cabeb4aa9b8f8275685d524539291e140800000000000013202c3946535f6c7986929facb9c5d2dfecd7cabeb1a59a8f8a898989898989898887868482807d7975706b636159524c443d342c231a110700000000000000000613202d394653606c7985929facb8c5d2dfdbcec2b5a89b8f82756e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6f6d685e5246392d20130700000000000005121e2a36424d576a7783909daab6c3d0d0c4b7aa9d9184776a7683909da9b6c3bfb2a5988c7f7e8b98a4b1bec4b7ab9e918478677784909daab7c3d0d0c3b6aa9d908377655b5044372b1f120500000000000000000000000009141f2a36424d57626e7b87939facb6c0ccd8d8d1cbc7c5c6c8ccd2d9d5c9beb3a99e9285796d60554c4132281e0e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a677481878787878787878787878787878787877a6d605b687581878787878787878787878787878787877a6e615c68758187878787878787878787878787878786796d6053473a2d20140700010d18232d373f464a4c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c4b463f372e23180d0200000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000a1623303d495663707c8999a3aebac7d3e2e2d6cabeb3a99f92857b6f6a63605d555c5c5c6874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f2316090000000614202d3a46525e696e6d686a68676564636260605b545d5d5c5c5c565e616d7783909daab6c3d0dde9dfd2c6b9ac9f9386796d6053463a2d20130700000b17222d384149505c636d737f8b939aa4abb5bdc6cfc3b9b1aaa29f938f847d736d665c554b5252525252525252524c4a463f372d23180d0100000714202d3946525e686e6d686a68676564636261605d555f5e545c6061666d7a85929fabb8c5d2deebded1c4b8ab9e9185786b5e5245382b1f12000000000000000000000a15202c38434f5963707d89959fabb8c3ced9d8ccc2b9ac9f93877b6e61564c41362a1d130700000000000000000000000000000006121f2b3844505c666d6e6d6669676664636260605b5e5d5d5c5c5c565e61676d77818e97a1adb9c6d2dfdfd2c6b9ada197897c706356493d2d22170b000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605354616e7a87939facb9c6d2dfecdfd3c6baaea2988a7d7164564c413529170d0200000000000013202c3946535f6c7986929facb9c5d2dfecdacec2b6aba19a9696969696969695959992918f8c8985817d77706b615e564f473e352c23190f05000000000000000815212e3b4854616e7b8798a2aebac6d3e0d9ccbfb2a6998c7f7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a6d6154473a2e2114060000000000000714202d3a46525e697985929facb8c5d2cfc2b5a99c8f82766975818e9ba8b4c1c0b3a6998d807f8c99a6b2bfc2b6a99c8f83766976828f9ca9b5c2cfd2c5b8ac9f9285796c605346392d201306000000000000000000000000030e1a26313b47535f6975818e9aa4afbbc8d4e0dcd7d3d2d2d4d8ddded2c6b9ada1978c7f72675d51433a2f20160c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a776c6054606d7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786c6054606d7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786c605346392d201306000006111b252d343a3e3f414141414141414141414141414141414141414141414141414141414141414141414141413f3e3b352e251c12070000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000000c1926333f4c5966727f8c99abb4bfcbd7e3dfd3c6baada2978b7f7269605854514c4f515b6874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f23160900000005121e2a36424d575e61615e565c5a595756555453504a5050504f4f4c525b66727f8c99a5b2bfccd8e5e0d4c8bbafa49a887b6e6155483b2e221508000006111b262f383f44525b636d727f889399a3abb5bdc6cbc3bcb4aea59e96918780786d675d554c44464646464646463f3e3a342d251b110600000005111e2a36414c565e61615e565b5a595756555453514b52524a5053545d6775828e9ba8b5c1cedbe8ded2c5b8ab9f9285786c5f5245392c1f1200000000000000000000040f1b27323d4854606b7683909da7b1bcc8d4e0d4c7bbafa4998d8174685e52463a2f24180d00000000000000000000000000000003101c28343f4a545c6061605c545a595856555453504950504f4f4f4d52555c656d7a85919eabb8c4cfdae2d5c9beb3a9998c7f736653493f33271b0f030013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60545464717e8b9aa4afbbc8d4e0ebded2c5b8ab9f9285796d6053473a2f2419070000000000000013202c3946535f6c7986929facb9c5d2dfecded3c8bdb3aba5a3a3a3a3a3a3a2a2aba39f9e9c9998928e89837d756e68605950473e352b21170b02000000000000091623303c4956636f7c8996aab4bfcad6e2d9cdc0b4a89c918c88888888888888888888888888888888888888888888888175685b4e422e23170b0000000000000815212e3b4854616e7b8798a2aebac6d3cec1b4a79b8e81746873808c99a6b3bfc1b4a79b8e81818d9aa7b4c0c1b4a79a8e81746874818e9ba7b4c1ced3c6baaea298877b6e6154483b2e2115080000000000000000000000000009141f2b37424d57626f7c87939facb9c1ccd7e3e3e0dfdfe0e4e0d5c9bdb2a99e9185796d60554b4031281e0d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c655b525d686d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c665b525d686d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c655b5044372b1f120500000009131b23292e31323434343434343434343434343434343434343434343434343434343434343434343434343433322f2a231c130a000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1105000000000000000000000000000000030f1c28333f4a546875828e9ba8b5c1d1dce7ded2c5b8ab9f9285796d60574e474546515b626874818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f231609000000020e1a25303b454d525454524c4f4d4c4b49484746443f4443434342414a5663707d8996a3b0bcc9d6e3e4d8ccc0b6ac96897c6f6356493c302316090000000a141d262d334049525b636d727e879299a3abb4bcc6cec6bfbaafa8a199938d81796d675d564c443a323939393932312e29231b130900000000020e1925303b444c525454524c4f4d4c4b49484747454045453f44464c556774818d9aa7b4c0cddae7dfd2c5b9ac9f9286796c5f5346392c201300000000000000000000000a16212c38444f5964707d8a95a0acb8c3ced9d7ccc0b5ab9f92867a6e61554b4135291d12070000000000000000000000000000000b17232e38424a50535553514a4e4c4b4a4847494b4e50514a5053504a4b535d6873808c99a9b3becad6e2dacfc2b5a99c8f8276655b5044372b1f12050013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6261606675828e9bacb6c0ccd8e4e2d5c9beb3a99b8e8174675c514538281e13080000000000000013202c3946535f6c7986929facb9c5d2dfece4d9cfc5bdb6b1b0afafafafafafafb5afacaba8aaa29f9b95908a827a6f6b615a50473d33291d140a0000000000000a1724313d4a5764707d8a97a3b0bdd0dbe7dcd0c4b8ada39c999595959595959595959595959595959595959595959590837669544a3f34281c100300000000000a1723303d4a5663707d8996aab4bfcad6ccc0b3a6998d807366717e8b97a4b1bec2b5a99c8f82828f9ca8b5c2bfb2a5998c7f726673808d99a6b3c0ccd6cabfb4aa96897d7063564a3d3023170a00000000000000000000000000030e1a26313c47535f6a75828f9ba6b0bbc7d3dfebedececede5dacfc5b9ada1968b7f72675d51433a2f1f160c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c555d6061616161616161616161616161616161605b534c565d6061616161616161616161616161616161605b544c565d6061616161616161616161616161616161605b53493f33271b0f03000000010911181e222425272727272727272727272727272727272727272727272727272727272727272727272727272625221e18120a01000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110500000000000000000000000000000006121f2b3844505b667784909daab7c3d0dde7dacec1b4a79b8e8174675c51453d3e4a57626d7274818e9ba7b4c1cedae2d5c8bcafa295897c6f6256493c2f2316090000000009141f29333b42464847464142413f3e3d3b3a3938332d363636303c4956626f7c8995a2afbcc8d5e2e8ddd2bdb0a3968a7d7063574a3d3024170a000000020b141b2227374049515b626c717e879299a3aab4bdc6cfcac1bab2aba49f938f82796d685d564c443a31282c2c2524221e18110901000000000008141e29323b414647474641454747474747474747474747474747505c6675828f9ba8b5c2cedbe8dfd2c6b9ac9f9386796c605346392d2013000000000000000000000004101c27333d4653606c7883909da8b2bdc8d4ddd2c7baaea3988d8073675d5145392e23180c00000000000000000000000000000006111c2630383f44464846444041434749505355585b5d5e5f5c605c54595656616e7b8897a1adb9c6d2dfded2c5b8ab9f9285796c605346392d2013060013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a716f6e6c6d7985929fabb8c5d2dde8dfd2c6b9ada197897d7063554b4034291c10040000000000000013202c3946535f6c7986929facb9c5d2dfecebe1d7cfc8c2bebdbcbcbcbcbcbcbcc0bbb9b7b5b4aeaca7a09d948f857d706c61594f453b2f261c110600000000000b1825323e4b5865717e8b98a4b1becbd7e4e0d5cabfb5ada8a6a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19e918478665c5044382b1f120600000000000c1925323f4c5865727f8b98a5b2bed0dbcbbeb2a5988b7f72656f7c8996aab4bfc3b7aa9d908383909daab6c3bdb0a4978a7d7165727e8b98a5b1becbdbd0beb2a5988b7f7265584c3f3225190800000000000000000000000000000915202b37434e58626f7c88949eaab7c3d0dce9f6f8f9ede1d5c9bdb2a89e9184796d60554b4031281d0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a434c515454545454545454545454545454545454535049434c52545454545454545454545454545454545453504a444c52545454545454545454545454545454545453504941382d22170b000000000000060d121518191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b191816120d070000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000613202d394653606c7985929facb8c5d2dfe4d7cbbeb1a4988b7e7165554b40333f4c5965727f7f83909daab6c3d0dde2d5c8bcafa295897c6f6256493c2f23160900000000020d17212930363a3b3a39353337393c3f4244434141404041414242495663707c8996a3afbcc9d6e2e3d6cabdb0a3978a7d7064574a3d3124170a00000000020a1117252e373f49515a626c717e879298a3abb5bdc7d0ccc4bdb5afa59e948f837a6d685d564c433a31271d141816120d0600000000000000020d1720293036393b3a434b5153535353535353535353535354545a606d7985929eabb8c5d1deebdfd2c5b8ac9f9285796c5f5246392c1f130000000000000000000000000b161f2b3744505b65717e8a96a0acb8c4cfdad6cbbfb4aa9f92857a6d60544b4034281b11060000000000000000000000000000000a141e262e34383a3b3a3d44484e54535b60626567696b6c666d66696662605f697885929eabb8c5d1dedfd3c6baaea298877b6e6154483b2e2115080013202c3946535f6c7986929facb9c5d2dfe5d8cbbfb2a5988c7f7d7c7a79787d8998a2aebac6d3e4ebded1c5b8ab9e9285796d6053463a2f23180c000000000000000013202c3946535f6c7986929facb9c5d2dfecf8e9e1d9d3cecac9c9c9c9c9c9c9d1cbc7c5c4c2bfbab8b1aca69e9792867e706b60574d42382d22170b01000000000c1925323f4c5865727f8b98a5b2becbd8e5e6dbd1c7bfb8b4b2aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeac9f9286796d6053463a2d20130700000000010e1b2734414e5a6774818d9aa7b4c0cdd7cabdb0a4978a7d71646e7a8798a2aebac5b8ab9e928584919eabb8c4beb3a995887c6f64707d8a97a3b0bdd2ddcdc1b4a79a8e8174675b4e413024190d0100000000000000000000000000030f1b26313c47535f6a75828f9ca8b5c2cfdbe8f5fff8ebdfd2c5b9ada1968b7f72675c5143392f1f160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313a4145474747474747474747474747474747474746443f3a4145474747474747474747474747474747474746443f3a4145474747474747474747474747474747474746443f382f261b1106000000000000000106090b0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0c0a0602000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000815212e3b4854616e7b8798a3aebac7d3e0e3d7cbc0b5ab95897c6f6256493c2e46525f6c79868c9095a0abb8c4d1dde2d5c8bcafa295897c6f6256493c2f2316090000000000050f171f252a2d3337393c3f4446484b4f50504e4d4d4d4d4e4e4f4e5865717e8b98a4b1becbd7e4e3d7cabdb0a4978a7d7164574a3e3124170b00000000000006131c252d373f48505a616c717d869299a3abb5bec7d2d0c7c0bbafa69f9590837a6d685d554b43392f261b11060601000000000000000000050e171e252a2d35404b555d6060606060606060606060606061646c727f8c97a1adb9c6d2dfebded1c4b8ab9e9185786b5e5245382b1f12000000000000000000000000030f1b27333f4953606d7884919ea8b2bdc9d5dcd0c6baada2978c7f72665c5145382d22170b000000000000000000000000000000020c141c23282b323a41464f54586062656c6f727476777979797876736f6c656976838f9ca9b6c2cfdce2d6cabeb4aa96897d7063564a3d3023170a0013202c3946535f6c7986929facb9c5d2dfecd9cdc0b4a79c918c8a8987868484919eaab3becad6e2e1d5c9bdb2a89a8d8074665c5044382c1d1207000000000000000013202c3946535f6c7986929facb9c5d2dfecf8f3ebe4dedad7d6d6d6d6d6d6d5dcd7d4d2d1d0cac6c3bcb8b0a9a19892867d70695e544a3f33281d1207000000000c1926333f4c5966727f8c99a5b2bfccd8e5ede3d9d1cac4c0bfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbafa399877b6e6154483b2e2115080000000004111d2935414c566976838f9ca9b6c2cfd5c9bcafa296897c6f636c7985929facb8c5b9ada2979286929facb9c5b9ada197867a6d626f7c8995acb6c0ccd8cfc3b6a99c90837669564c4135291d110500000000000000000000000000000a15202b37434e5863707c8996a3afbcc9d6e2effcf7eaded1c4b7ab9e9184796d60554b4031271d0d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3937332f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3938332f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3937332d261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000916232f3c4956626f7c8995aab4bfcbd6e3e0d3c7bbafa399877a6d6154473a3946525f6c7985929da0a7b1bcc8d4e0e2d5c8bcafa295897c6f6256493c2f23160900000000000b151e272e34383f44464849505355585b5d5c5b5a5a5a5a5b5b5c58606a75818e9ba8b5c1cedbe8e3d6c9bdb0a3968a7d7063574a3d3024170a000000000000000a131c252d363f48505a616b707d879299a3acb6c0ccd8d2ccc1b8b0a79f9590837a6d675d554b41382d22170e050000000000000000000000050d14191f2c3845515d676d6d6d6d6d6d6d6d6d6d6d6d6d6e70767e87929fa9b3bec9d5e2e7ddd0c3b6aa9d9083776a5d5044372a1d11000000000000000000000000000b17222d3844505c66717e8b96a1adb9c4cfdad6cabeb3a99e9184796d6053493f33271b0f03000000000000000000000000000000061019232b343d444c525960636a6f74787c7e81838485868685837f7c78747175828e9ba8b5c1cedbe7dbd0beb2a5988b7f7265584c3f3225190c0013202c3946535f6c7986929facb9c5d2dfecdcd0c4b8ada39c9897959992919196a1adbcc5d0dbe6ded2c5b9aca196897c6f63544a3f34281c0b01000000000000000013202c3946535f6c7986929facb9c5d2dfecf8eae2dad4cfcbcacacacacacacacbced2d3d6dbd6d3cdc8c1bbb3aaa39892857b6e665b5044392f23180c000000000c1926333f4c5966727f8c99a5b2bfccd8e5f2ece3dbd5d0cdccc8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8cbc0b5ab96897c6f6356493c30231609000000000613202c3945525d687885919eabb8c4d1d6cabeb3aa94887b6e61657784909daab7c3beb3a9a2999299a3afbbc4b8ab9e91857867616e7b879aa4afbbc8d4d1c5b8ab9e928578685d5246392d20130700000000000000000000000000000713202d3946525e6873808d99a6b3c0ccd9e6f3fff6e9ddd0c3b6aa9d9083776c61544a3f34281d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e24292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b2724292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b2824292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b27221b140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000b1724313e4a5764717d8a97a4b0bdd0dce7dfd2c5b9ac9f928679685e5246393946525f6c7985929facb1b9c3cdd9e4e2d5c8bcafa295897c6f6256493c2f2316090000000007121d273039404549505355535b606265686a696867666667686868696a6f7c87929facb9c5d2dfece3d7cbbfb4aa96897c6f6356493c3023160900000000000000010a131b242d363e485059616b717e87929aa4afbbbfc8d2d7cac2b9b1a7a0959083796d675c53493f332720170d020000000000000000000000020814202d3a4753606d797a7a7a7a7a7a7a7a7a7a7a7a7b7d828b9299a3afbbc5cfdae6ddd6cabeb3a99b8e8174685b4e4135281b0e0000000000000000000000000006111b28343f4a54606d7984919ea9b3bec9d5dbd0c5b9ada1968b7e71655b5044372b1f160a0000000000000000000000000000040d18222b353d464e565e616b70767c8185888b8e9091929298928f8c8985817d7a818e9ba7b4c1cedae6d9ccc0b3a6998d8073665a4d4033271a0d0013202c3946535f6c7986929facb9c5d2dfece0d5c9bfb5ada7a5a4aba39f9e9ea1a8b2bdced7e1eaded1c4b7ab9e9184786c605346392e23170c00000000000000000013202c3946535f6c7986929facb9c5d2dfecece2d8d0c8c3bfbebdbdbdbdbdbebfc2c5c7cad0d8dfd9d4cdc5bcb4aaa2979082786c60554b4034291c10040000000c1926333f4c5966727f8c99a5b2bfccd8e5efe4dbd3cbc6c2c1c0c0c0c0c0c0c0c0c0c3c4c7cdd4d4d4d4dcd1bdb1a4978a7e7164574b3e3124180b000000000714212d3a4754606d7a8797a1adb9c6d2d3c6baaea298867a6d606875828f9ba8b5c2c5bbb3aba39fa3abb5c0c3b6a99c90837669606d7986939facb9c6d2d2c6b9ada197877a6d6154473a2e2114070000000000000000000000000005111d2935414c56616d7a86929facb8c5d2dfebf8f8f8eaddd1c4b8ab9f958a7e71665c5044392f24180d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d202121212121212121212121212121212121201f1b191d202121212121212121212121212121212121201f1c191d202121212121212121212121212121212121201f1b17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090e070f1c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000c1825323f4b5865727e8b98a5b1becbd8e4ded1c5b8ab9e9285786b564c41363946525f6c7985929facb8c3cbd5dfeae2d5c8bcafa295897c6f6256493c2f231609000000000c18232e39434b51535b606265656c6f72757776747473737474757575777c849199a3aebbc7d3e0ece0d3c7baaea398877b6e6154483b2e21150800000000000000000109121b242c363e474f59616c717e88939fa3adb6c0c9d3d4cbc2b9b1a79f959082796d655b50443e32291e1408000000000000000000000004111e2a3744515d6a7783868686868686868686868687878a8f949fa3abb5c0cdd7e1ddd8cbc3baada2978b7e7164584b3e3125180b00000000000000000000000000000b17232e3844515c66727f8b97a1adb9c5cfdbd5c9bdb2a89d9184786c6053463d32271b0f03000000000000000000000000010c161f2a343d474f5860686d757d83898d9297989a9c9e9f9fa29f9c9997918e8a8685929fabb8c5d2dee7dacec1b4a79b8e8174685b4e4135281b0e0013202c3946535f6c7986929facb9c5d2dfece6dbd1c7bfb8b4b2b0b5afacababadb2bac4cfe0e9e0d4c8bcb1a7998d8073655b5044372b1c110600000000000000000013202c3946535f6c7986929facb9c5d2dfece5dad0c6beb7b2b1b1b1b1b1b1b1b2b5b8babfc6ced3dcdfd6cec6bcb3a99f948b7e71675c5145382c1f14090000000c1925323f4c5865727f8b98a5b2becbd8e5e8ddd3c9c1bab6b4b3b3b3b3b3b3b3b3b3b6b7bcc2cad4dee1d9ccbfb2a6998c7f7366594c403326190d000000000916232f3c4956626f7c8995a9b3bec9d5d2c5b8ab9f928578675d6773808d9aa6b3c0cdc5bdb5afacafb5bdc7c1b4a79b8e8174685c667885929eabb8c5d1d5c9beb3a996897c6f6356493c30231609000000000000000000000000010c13202d3946525d6873808d98a2aebac6d3dfececebebece0d4c8bcb1a79e9184786d60554b4035291e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d1113141414141414141414141414141414141413120f0d1113141414141414141414141414141414141413120f0d1113141414141414141414141414141414141413120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315161b14131c2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000d192633404c5966737f8c99a6b2bfccd9e5ddd1c4b7aa9e9184776b5e5144303946525f6c7985929facb8c5d2dfe6f1e2d5c8bcafa295897c6f6256493c2f23160900000004101c2834404b555c60656c6f7275797b7e82838381808080808181828284889196a1abb5bfcbd7e3ecdfd2c5b9ac9f9286796d6053463a2d2013070000000000000000000009121b242c353e47505a616c727f8b919ca4aeb7c1cad4d4cbc3b9b1a79f948e81776c60594f443b3025190d040000000000000000000004111e2a3744515d6a778490939393939393939393939394979c9fa6afb5bdc7d1dfd9d2ccc2b9b1a79f9285796d6053473a2d201407000000000000000000000000000006111c2834404a54606d7985919ea9b3becad6dacfc4b8aca0958a7d7064594f44382c20150a00000000000000000000000008131e28313c464f59606a6f7a818990959a9ea1a9a7a9aaacacaeaba9a9a19e9b99929297a2adbac6d3dfe8dbcfc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfecede3d9d1c9c4c0bfbdc0bbb9b7b7b9bdc4ccd6e0eaded1c5b8aca095887c6f6253493f33271b0f0300000000000000000013202c3946535f6c7986929facb9c5d2dfecdfd4c8beb4aca6a4a4a4a4a4a4a4a5a8acaeb4bcc2cad3dce0d8cfc5bbb0a69e9184796d6053473b31251a0e0200000b1825323e4b5865717e8b98a4b1becbd7e4e2d7cbc1b7afaaa8a6a6a6a6a6a6a6a6a6a9abb0b8c2cdd8e4dacdc1b4a79a8e8174675b4e4134281b0e000000000b1825313e4b5864717e8b97a4b1becfdad0c4b7aa9d9184776a5565727e8b98a5b1bed1cfc7c0bbb9bbc0c7cfbfb2a6998c7f7366546a7784909daab7c3d0dacfbeb1a4988b7e7165584b3e3225180700000000000000000000000008131e2935414c56616d7a85929faab4bfcad6e2e2dfdedfe0e3d8cdc3b8aca0968b7e72675d51453a3025190d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607080808080808080808080808080808080605030104060708080808080808080808080808080808060603010407070808080808080808080808080808080806050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151b1f21222821201d2935424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000d1a2734404d5a6773808d9aa6b3c0cdd9e6ddd0c3b7aa9d9084776a5d5144373946525f6c7985929facb8c5d2dfe4e4e2d5c8bcafa295897c6f6256493c2f23160900000006131f2c3845515c676d75797c7f8285888b8e908f8e8d8d8d8d8e8e8f8f90959ea1a8b2bdc6d1dce7ebddd0c3b6aa9d908377665c5044382c1f1206000000000000000000000009121a232c353e48505a626d727f8c929da5afb8c2ccd5d5cbc2b9b0a69e938d80736b61564c41362a21160b0000000000000000000004111e2a3744515d6a7784909da0a0a0a0a0a0a0a0a0a0a1a3a9aab0bbc0c7cfd9d9d0c7c0bbb0a79f958c8073675d5145392c2013060000000000000000000000000000000c18232e3945515d67727f8c97a2adbac5d0dbd4c8bdb1a89d9083766b6054483c31261b0f0300000000000000000000010d19242f3a434e58606b707c848e939d9fa7abadb3b4b6b7b8b9bab8b6b3adababa39f9fa2a9b3becad6e2e9dcd0c3b6a99d9083766a5d5043372a1d100013202c3946535f6c7986929facb9c5d2dfecf8ebe3dbd5d0cdcbd1cbc7c5c4c4c5c9cfd6dee8eaddd0c3b7aa9d9084776a5f5341382d22170b0000000000000000000013202c3946535f6c7986929facb9c5d2dfecdbcfc3b7aca29b97979797979797989b9fa2aab0b8c2cad4e1e1d7cdc2b9ada1968b7e7164574d42362a1e120500000a1724313d4a5764707d8a97a3b0bdd0dce7ded2c6baafa59e9b9a9a9a9a9a9a9a9a9a9c9fa6b0bcc7d3e0dccfc2b5a99c8f8276695c4f4336291c10000000000d1a2733404d5a6673808d99a6b3c0ccd9cfc2b6a99c8f8376695c63707d8996abb5c0cbd7d1cbc7c5c7cbd1cabdb0a4978a7d71645c6976828f9ca9b5c2cfd9cdc0b3a69a8d8073675a4d402f23180c0000000000000000000000010d19242f3945525d6873808c98a2aebcc5d0dbdad6d2d1d2d3d6dcd4c8bdb2a89e9185796d60564c41362a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101820262b2e2f342e2d292535424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7ddd0c3b6aa9d9083776a5d5044373946525f6c7985929facb8c5d2d7d7d7d7d5c8bcafa295897c6f6256493c2f2316090000000713202d3a4653606d798185888b8f9297989b9d9c9b9a99999a9b9b9b9c9da0a7acb2bac4cfd8e3ebe2d5c9bdb2a89a8d807467544a3f34281c100300000000000000000000000008111a232c363e48515b636d73808d939ea6b0bac3ced7d4cbc2b8afa59f93887d70685e52463d32271b0f0400000000000000000004111e2a3744515d6a7784909daaadadadadadadadadadadb0b5b7bbc2cbd1d9ddd2c7beb6afa69f959083786d60554b4035291d100400000000000000000000000000000007121c2935404b55606d7a85929faab4bfcad6d9cec3b7ab9f95897c6f63584e43372b1f14090000000000000000000004111d2935414c565f6a707d8691969ea5abb1b8b9bec1c3c4c5c5c6c5c2beb9b8b5afacabadb3bbc5d0dbe6e9ddd0c3b6aa9d9083776a5d5044372a1d110013202c3946535f6c7986929facb9c5d2dfecf8f5ede6e0dcd9d8dcd7d3d2d1d1d2d5dae0e8eee2d6cabeb3a9998c7f7366584e432f261b11060000000000000000000013202c3946535f6c7986929facb9c5d2dfecd8cbbfb2a69b908b8a8a8a8a8a8b8c8f92989ea6b0b8c2cfd8e2dfd5c9bdb2a89d908376695e53463a2d2114070000091623303c4956636f7c8996aab4bfcbd6e3dbcfc2b6aa9e938e8d8d8d8d8d8d8d8d8d90949fabb7c4d0ddddd0c3b6aa9d9083776a5d5044372a1d1100000004101c2834404a546875828f9ba8b5c2cedbcec1b4a89b8e8175685b616e7b8899a3afbbc7d4dcd7d4d2d4d7d6cabeb3a995887c6f625b6874818e9ba7b4c1cedacfc2b5a89c8f827569554b4034291c10040000000000000000000004111d2935414c56606d7a85929faab4beced7d7cfcac6c5c5c7cbd0d8cec3b9ada1978c7f73685e52463b31261a0e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607080809090a09090806050300000000000000000000000000000000000000000000000000000000000003090d1012131313131313131313131313131313131313131313131313131313131313131313131313131313130f0f0d090400000000000000000000000000000000000000000000000000000000000000020b18222a32373b3c413a39353035424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7ddd0c3b6aa9d9083776a5d5044373946525f6c7985929facb8c5cbcbcbcbcbcbc8bcafa295897c6f6256493c2f2316090000000713202d3a4653606d79869297989b9ea1a9a8aaa9a7a7a6a6a7a7a8a8a8aaacb1b9bdc4ccd6e1eae4d9d0c7b9ada196897d706356493d2e23170c000000000000000000000000000008111a242c363f49515b606c77818e949fa8b1bcc5d0dbd4cac1bbafa49a92857a6e61594f44382c20150a00000000000000000004111e2a3744515d6a7784909daab7b9b9b9b9b9b9b9bababdc2c3c7ccd7dce3d8ccc0b6aca49f948f837a6d665c5043392f24180d01000000000000000000000000000000000c18242f3945515d6773808c98a2aebac6d0dcd3c7bcb1a79c8f82756a5f53473b31251a0e020000000000000000000613202c3945525d686f7c869298a1a8afb7bcc2c6c9cfcfd1d2d2d3d2cfc9c6c4c0bbb9b8babec5cdd7e1eceaddd0c3b7aa9d9084776a5d5144372a1e110013202c3946535f6c7986929facb9c5d2dfecf8ebe3dbd5d0cdcbcdced0d1d2d5dae1dee4ebecdfd3c6baada297887b6e6155483c3122140a000000000000000000000013202c3946535f6c7986929facb9c5d2dfe4d7cabeb1a4978b7e7e7e7e7e7e7e7f82868f949ea6b0bcc6d1dce5dacfc4b8ab9f95877b6e6154483b2e21150700000815222e3b4855616e7b8898a3aebac7d3e0dbcec1b4a89b8e8180808080808080808082909ca9b6c3cfdcdcd0c3b6a99d9083766a5d5043372a1d1000000006121f2c3844515c667784919daab7c4d0d9cdc0b3a69a8d8073675a606d7986929facb9c5d2dfe3e0dfe0dfd2c6b9ada197877a6d605a6673808d99a6b3c0ccd9d1c4b7aa9e918477675c5145382c1f1306000000000000000000000713202c3945525d6873808c98a2aebcc5d0d7cdc5beb9b8b8babfc6ced5c9beb3a99f92857a6d61574d42362a20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030606080b060c101213141516161616151413120f0b06070502000000000000000000000000000000000000000000000000070e14191d1f202020202020202020202020202020202020202020202020202020202020202020202020202020201c1b191510090200000000000000000000000000000000000000000000000000000000000a141d2a343c4347494e4746413a32424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1b2835424e5b6875818e9ba8b4c1cedbe7ddd0c3b6aa9d9083776a5d5044373946525f6c7985929facb8bebebebebebebebebcafa295897c6f6256493c2f23160900000006121f2b3844505c667985929fa9a8abadb3b5b6b6b4b3b3b3b3b4b4b5b5b7b8bcc3c9ced6dee8e2dcd2c7beb2a89e9184796d6053463a2d20130600000000000000000000000000000008121b242d373f44505b656d78828f95a0aab3becad6dcd8ccc0b6aca2978e81756b6054483c32261b0f03000000000000000004111e2a3744515d6a7784909daab7c3c6c6c6c6c6c6c6c7cacfd0d3d8dee8e0d4c8bbafa49a938d827a6d685e544a3f31281d1207000000000000000000000000000000000007121d2935414b55616d7a85929faab4bfcbd6d8cdc2b9ac9f93877c6f62574d42362a1e1308000000000000000006121e2b37424e57606d7a849198a2aab2bac1c7cdd2d5dadcdddcd7d3d2d2d2d2d1cbc7c5c5c6cad0d7dfe9f3eaddd1c4b7aa9e9184776b5e5144382b1e110013202c3946535f6c7986929facb9c5d2dfecede3d9d1c9c4c0bfc0c1c3c5c6c9cfced3d9e1ebded2c5b8ab9f9285796c605346392e23180c000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a71717171717172757b828f949faab4bfcbd7e3e0d4c8bcb1a7988b7e7265584b3f2f24180c00000613202d394653606c7885929facb8c5d2dfd5c9bcafa296897c737373737373737373808c99a6b3bfccd9dccfc2b6a99c8f8376695c504336291d100000000713202d3a4653606d7986929facb9c5d2d8cbbfb2a5988c7f7265595c667784919eaab7c4d1ddeaedecebded1c5b8ab9e928578685d5865727f8b98a5b2becbd8d2c6b9ac9f93867a6d6053473a2d20140700000000000000000004111d2935414c55606d7a85929faab3beced7cfc5bbb3adabacaeb4bcc6d0cfc4baaea2988d8074695f53463c32261b0b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507060b0f121315171a171c1f202122222323232221201f1b171514120e09040100000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c0300000000000000000000000000000000000000000000000000000006111c262f3c464e53555b54524c443e424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8ddd0c3b7aa9d9084776a5d5144373946525f6c7985929facb1b1b1b1b1b1b1b1b1b1afa295897c6f6256493c2f23160900000003101c28343f4a5f6b7885929eabb5b8b9bec1c3c2c1c0c0c0c0c1c1c2c2c3c5c8ced5dae0e2dfd8d0cbc0b6aca1968c7f72665c5044382b1f12060000000000000000000000000000000009121b2527333f49535c666d7a839198a2aebac1ced7ddd2c7beb3a99e93897d6f63584e43372b1f1306000000000000000004111e2a3744515d6a7784909daab7c3d0d3d3d3d3d3d3d4d6dcdcdfe3e9ecdfd2c6b9ac9f938880786d685e564c42382e1f160c010000000000000000000000000000000000010d18242f3a46525d6873808d98a3aebac6d1dcd4c8bbafa49a8e8174695e53463a3024190d01000000000000000814212e3a47535f6a74808d96a0aab4bcc4ccd3d8dfdfd9d4d1d1cbc7c5c5c5c7cbd1ced1d2d3d6dbe1e9f2f7eaddd1c4b7aa9e9184776b5e5144382b1e110013202c3946535f6c7986929facb9c5d2dfece6dbd1c7bfb8b4b2b3b5b6b8b9bec5c2c8cfd8e1dfd3c6baada297897c7063544b4034281c10040000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d646464646465696e78828f98a3aebac7d3e0e4d8cdc1b5a89b8e817568554b4035291d10040006121f2b3844505b667784909daab7c3d0ddd7cabdb0a4978a7d716767676767676774818d9aa7b4c0cddadbcec1b4a89b8e8175685b4e4235281b0f0000000815222f3b4855626e7b8899a3afbbc7d3d7cabdb1a4978a7e716457546976828f9ca9b5c2cfdce8f5f6e9dcd0c3b6a99d9083766a565764717d8a97a4b0bdcad7d4c7bbafa499887b6f6255483c2f2215090000000000000000010c13202c3945515d67737f8c97a2adbcc5d0d6cabeb3a9a19e9fa3aab4bfcbd6cabeb4aa9f92867b6e61584e43372b1d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030506080d111314171c1f2022242623282c2d2e2f2f30302f2f2e2d2b272221201e1a14110d0701000000000000000000000000000000000007111a232a313538393939393939393939393939393939393939393939393939393939393939393939393939393939393635312c261e150c0200000000000000000000000000000000000000000000000000000b17222d38424e585f6267615e565047424f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8ddd0c4b7aa9d9184776a5e5144373946525f6c7985929fa4a4a4a4a4a4a4a4a4a4a4a4a295897c6f6256493c2f231609000000000b17232e44515e6b7784919eaab7c4c6c9cfd0cfcecdcccccdcecececfd0d1d4d9dfdddbd6d3cec6bfbaafa49a9184796d60544a3f34281c10030000000000000000000000000000000000091217222d38414a545d686e7b86929fa5afbcc5d0dbd9d0c5bbafa59c9083766a5f53473b2e211509000000000000000004111e2a3744515d6a7784909daab7c3c7c7c7c7c7c7c7cacfd0d3d8dee6e8dccfc2b5a99c8f82796d665d564c443a30261c0d040000000000000000000000000000000000000007131d2935414c56616e7a86929fabb5bfcbd7d8ccc0b6ac9f92867b6e61564c4135291d120700000000000004101d2935404b55626e7b87929fa8b2bcc6ced6dfe4ddd5cdc8c4c3bfbab9b8b9babfbec1c5c6cacfd7dfe4ecf7eaddd0c4b7aa9d9184776a5e5144372b1e110013202c3946535f6c7986929facb9c5d2dfece0d5c9bfb5ada7a5a6a8aaabadb3b2b6bdc6cfdfe2d6cabeb3a99a8e8174665c5145382c1f13070000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6057575758575e666e7b86929facb9c5d2dfeaddd1c4b7aa9e918477675d5145392c1f130600030f1c28333f4a546874818e9ba7b4c1cdd9d9ccbfb3a6998c8073665c545a575e697683909ca9b6c3cfdcd9cdc0b3a69a8d8073675a4d4034271a0d0000000b1724313e4a5764717d8a97abb5c0cbd7d6c9bcafa396897c7063565a6774818d9aa7b4c0cddae7f3f4e7dbcec1b4a89b8e8175685b56636f7c8996a2afbccfdbd7ccc0b5ab978a7d7164574a3e31241706000000000000000007131d2935414b55606d7a85929fa9b3beced7d2c6b9ada197929298a3aebac7d3d0c5baaea3998e81756a5f53473d2f261b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121315191d202122282b2d2f31332e34383a3b3b3c3c3d3c3c3b3937332d2e2d2a25201d18130c07010000000000000000000000000000030e19232c353c41454646464646464646464646464646464646464646464646464646464646464646464646464646464642413d3730271e140900000000000000000000000000000000000000000000000000030f1c28333f4a545f6a6f746d68625a534d4f5c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8ded1c4b7ab9e9184786b5e51452f3946525f6c798592989898989898989898989898989895897c6f6256493c2f23160900000000061e2a3744515d6a7784909daab7c3d0d5dad6d1cecdc9ccced0d2d3d6dbdbd6d3d2d0d0cac6c1bcb4aea49f93887d70675d5142382e23170b0000000000000000000000000000000000000006111b262f39424c565f69717e8a939eaab3becad6e2d7cdc1b7ab9f94887c6f6255493c31261a0e020000000000000004111e2a3744515d6a7784909daab7babababababababbbdc3c4c7cdd4dde4ddd0c3b7ab9f948d80746d63594f433a2f24190d0000000000000000000000000000000000000000010d1924303a46525e6874808d99a3aebbc7d2ddd2c7bbafa3998d8074685d5246392f24180c0000000000000613202c3945515d6774818e99a3afbac4ced7e0e5dbd3cbc3bcb8b6b4aeacabacaeb4b1b4b8b9bec5cdd2dae4eeeaddd0c3b7aa9d9084776a5d5144372a1e110013202c3946535f6c7986929facb9c5d2dfecdcd0c4b8ada39c989a9b9d9ea1a9a6abb4bdcdd7e1dbcfc5b8ab9f9285796d6053463a2f24180d0100000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534b4b4b4d545f6975818e9ba8b5c1cedbe8dfd2c6b9ac9f93867a6d6053473a2d20140700000b17222d3e4b5865717e8b98a7b1bcc8d4ddd0c4b7aa9d9183786d66676667696e7b87929facb9c5d2dfd6cabeb3a9988b7e7165584b3e3225180b0000000d192633404c5966737f8c99a6b2bfd1dcd6cabfb4aa95887b6e62555965727f8c98a5b2bfcbd8e5f7f2e6d9ccbfb3a6998c8073665955616e7b8894a9b3becad6ddd2bfb2a6998c7f7366594c402d22170b00000000000000010d18242f3945515d67737f8c97a2adbcc5d0d8ccc0b6ac9e928586929facb8c2cdd7cbbfb4ab9f93877c6f62594f41382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f202225292d2e2d3338393b3e40423f4446474849494949484746443f3e3b3a36302c29241d18120b030000000000000000000000000009141f2a353e474d51535353535353535353535353535353535353535353535353535353535353535353535353535353534f4d49423930261b10040000000000000000000000000000000000000000000000030c19232b3844505b666f7c817a716c625f57515c6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000f1b2835424e5b6875818e9ba8b4c1cedbe7ded1c5b8ab9e9285786b554b40353946525f6c79868b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b897c6f6256493c2f23160900000003101d2a3643505d697683909ca9b6c3cfdcd2cbc5c2c0bdbfc1c3c5c6cad0d0cac6c5c4c2bebab8b0aaa39f928c80736b61554b4030261c110600000000000000000000000000000000000000000a141d27303a444d57616c74818e98a2aebac6d3dfdfd3c7bbb0a69a8d807467574d42372b1e12060000000000000004111e2a3744515d6a7784909daaadadadadadadadadaeb0b6b7bcc2cbd2dadfd3c7bbb0a69d928c7f726b60554c4135291d1207000000000000000000000000000000000000000008131e2a36414c56616e7b86929fabb5c0ccd7d7cbc0b5ab9f92867a6d61554b4035291c110600000000000714202d3a4753606d7a86929fabb5c0ccd6e0e8dfd3c9c1b9b1acaaaaa39f9f9fa3aaa4a8abadb3bbc0c8d2dce7e9dcd0c3b6a99d9083766a5d5043372a1d100013202c3946535f6c7986929facb9c5d2dfecd9cdc0b4a79c918c8d8e909297979aa2abbbc5d0dbdfd3c6baada2978a7d7064554b4135291d110400000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473e3e424d5764717e8a97a4b1bdd0dbe7e0d4c8bbafa49a887b6e6255483b2f22150800000615212e3b4854616e7b8795a0abb8c6d0dbd1c5b8aca0958d807975747374767b829099a3afbbc7d4dfd2c6b9ada197887c6f6255483c2f2215090000020f1b2835424e5b6875818e9ba8b4c1cedbd3c6baaea298877a6d60545764707d8a97a3b0bdcfdae6f2f0e4d7cabdb1a4978a7e71645753606d798697a2adbac6d3dbcec1b4a89b8e81756853493f33271b0f0300000000000004111d2935404b55606d7a85929ea9b3beced7d4c8bbafa49a8d80818e9ba7b1bcc7d4d1c6bbafa49a8f82766b6053493f33271c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b22272b2d2f3035393a3d3f4446484a4d4f4a505354555556565655545350494b4846423b39352f29241d150d070000000000000000000000000d1925313c4750585e5f6060606060606060606060606060606060606060606060606060606060606060606060606060605c5a544c42372c21150900000000000000000000000000000000000000000000000b151e2a36414c56606c78838e857e766e69605c556875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7dfd2c5b8ac9f928579675d514538313e4b5864717e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7a6d6154473a2e21140700000003101c2936434f5c6976828f9ca9b5c2cfd2c9c0bab5b4b0b3b5b7b8babfbbbbbfbab8b7b5b3adaba69e98928b80746e63594f43392f1e140a000000000000000000000000000000000000000000020b151e28323c45505a616d7a85929fabb8c5d0dbe4d8cdc2b7ab9e918478695f53473a2d2114080000000000000004111e2a3744515d6a7784909da1a1a1a1a1a1a1a1a1a1a3a9abb0b8c0c8d2dcd8ccc2b8aea49f93887d70675d5145392e23180c0000000000000000000000000000000000000000020d1925303b46535e6974818e99a4afbbc7d2dcd1c7baaea2988c7f73675d5145382e23170b00000000000b1724313e4a5764717d8a98a2aebdc7d1dee7e1d6cdc1b7afa7a09d97989292929895989b9ea2a9aeb6c0cbd6e1e8dccfc2b5a99c8f8276695c4f4336291c100013202c3946535f6c7986929facb9c5d2dfe5d8cbbfb2a5988c7f80828385868a909aa9b3becad6e2d6cabeb3a99b8e8175675d5145392c20130800000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a303b4855626e7b8895aab4bfcad6e2e4d8ccc0b6ac96897d706356493d3023160a00000714212d3a46535e697783909daab4bfcad6d4c8bcb1a79d928d8582808081838790959fabb5c0cbd7ded1c5b8ab9e9285796d6053463a2d201307000005121e2a36424d576a7783909daab6c3d0ddd2c5b8ac9f928579675d5155626f7b8895a9b3bec9d5e1eeeee2d6cabeb3a995897c6f6256515c677885929fabb8c5d2ddd0c3b6aa9d908377655b5044372b1f12050000000000000613202c3945515d67727f8c97a2adbbc5cfdfd2c6b9ac9f93877b7c88959fabb8c4cfd8ccc0b6ac9f94897d70655b5044382e23170c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3337393b3e4146474a4a50535557595b545c606162626363626261605b535854524d4745413a352f271f18120b0300000000000000000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69655e54493d3125190d0000000000000000000000000000000000000000000007121d27303946525e68727f8b95928b827b736d67606875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000000000000001020202020b1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e11050202020200000000000000000000000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c7baaea298867a6d6053473a2d3d4956626c7171717171717171717171717171717171716d685e5246392d201307000000020f1c2835424f5b6875828e9ba8b5c1cecbc0b7aea9a7a3a6a8aaacaeb4aeaeb4aeacaaa8a9a29f9a948f867f746e645c52473e31271d0c020000000000000000000000030608090c0b0a09080605030c16202a333e46525e6873808d9aaab4becad6e2ded2c5b9aca196887b6e6155483b2e2215080000000000000004111e2a3744515d6a7784909494949494949494949494979c9fa6aeb6c0cad4ded4cac0bbafa49a91847a6d60554b4034281c1004000000000000000000000000000000000000000008141e2a36424d57626e7b87939facb6c0ccd8d6cabfb4aa9e9285796d60544a3f34281c100300000003101c28343f4a546774818e9aaab4bfcfd9e3e6dacfc4bbafa59e95908a8786858687888b8e92979da4aeb9c5d1dde7dbcec1b4a89b8e8175685b4e4235281b0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a737577787a7e8a97a2adbac6d3dfdbcfc5b8ac9f92867a6d6054473a3025190d01000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d3a4653606d798698a2aebac6d3dfe8ddd2bdb0a3978a7e7064574a3d3124170a000005121e2a36424d5765727f8c98a2aebac5d0d9cec3b9aea49d97928f8d8d8d8f92999fa7b1bdc7d1dcd4c8bcb1a79b8e8174665c5044382b1f120600000714202d3a46525e697985929facb8c5d2ddd1c4b7aa9e9184776b554b53606d7a8697a1adb9c6d2dfe0e0dfd3c6baada297877a6d61544b556a7784909daab7c3d0ddd2c5b8ac9f9285796c605346392d201306000000000004101d2935404b55606d7985929ea9b3becdd7d5c9beb2a99c8f82767683909da9b3bec9d5d2c7beb0a69d9083786c60544a3f34281d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f4446484b4c525457545b60626466686a666d6e6e6f6f706f6f6e6c656864615e5754514b4540393128231c150c03000000000000000000121f2b3845515e6a74797979797979797979797979797979797979797979797979797979797979797979797979797979797570655a4d4135281b0f000000000000000000000000000000000000000000000c18232e39434f59616e7a85929f9e948f868079706b6875828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b00000000000002070b0d0d0f0f0f0f0f1824313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e110f0f0f0f0f08070502000000000000000d1a2734404d5a6773808d9aa6b3c0cdd9e6e2d6cabfb4aa94877b6e6154483b2e3945505a62646565656565656565656565656565656565615e564c41362a1d1105000000020e1b2835414e5b6874818e9ba7b4c1cec5baaea49d9a96999b9d9fa2aaa1a1aaa29f9d9b9997928e88827b726d645c524a40352c1f150b00000000000000000000040a0f131516181817161413120f0b0d18212a36414c56636f7c8998a2aebac6d3dfe1d5c9bdb2a8978a7e7164574b3e3124180b0000000000000004111e2a3744515d6a77838787878787878787878787888a90949da4aeb8c2cdd8dcd8ccc0b6aca1968c8073675c5145382c1f13060000000000000000000000000404040404040404020e1a25313b47535f6975818e9aa4afbbc8d4dbd0c6b9ada1978b7f72665c5044382b1f160b00000006121f2b3844505c667784909daab7c3d0ddebe1d5c9beb3a99e938e837e7a7978797a7c7e81858d929da9b5c1cedbe6dacdc0b3a79a8d8074675a4d4134271a0e0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d686a676d7985929fabb8c5d2dee0d3c7baaea2988b7e7164564c41362a1e1105000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d3844505c667985929facb8c5d2dfe4d7cabdb1a4978a7e7164574b3e3124180b0000020e1a25313b4754616d7a86929fa9b3becad6d5cbc0b6aea9a19e9b9a999a9c9fa3abb1b9c2cfd9d6cdc4b8aca095897d7063544a3f34281c100300000815212e3b4854616e7b8798a2aebac6d3dccfc3b6a99c908376695d50515d677885919eabb8c4d1d4d4d4d4d2c5b8ab9f928578685e524f5c6976828f9ca9b5c2cfdcd3c6baaea298877b6e6154483b2e21150800000000010b13202c3945515d67727f8c97a1adbbc5cfdfd2c6b9ada1978a7d70717e8a97a1adb9c7d1d9d0c2b8ab9f958a7e71665c5044392f24180d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414950535558565e616467666c6e7173757678797a7b7c7c7c7c7b7a797774716e6965605d55514b433e342e271e150c03000000000000000013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686868686868686868686868275695c4f4236291c0f00000000000000000000000000000000000000000004101c2834404b55606b75818e97a2a69f98928c847d746d75828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000000080e1317191a1c1c1c1c1c1c24313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b1e1c1c1c1c1c1c1514120e090200000000000d192633404c5966737f8c99a6b2bfccd9e5e7dbd0bcafa295897c6f6256493c2f343e48505658585858585858585858585858585858585854524c443a3025190d01000000010e1a2734414d5a6774808d9aa7b3c0cdc2b5a99d928d8a8c8e909298949494949892918f8c8985817c756e69625b524a40372e231a0d03000000000000000000070e151b1f22222525242221201f1b171c1c1925303a4653606d7985929fabb8c5d2dee5dacec0b3a6998d8073665a4d4033271a0d00000000000000000714212e3a4754616d7a7a7a7a7a7a7a7a7a7a7a7a7b7d838d929da6b0bcc7d3dfddd2c7beb2a89f9285796d6053463a2d20130700000000000000000306080911111111111111111109141f2b37424d57626f7c87939facb9c2ccd8d5c9beb3a99e9184786d6053463d33271c100400000713202d3a4653606d7986929facb9c5d2dfecdfd2c6b9ada1978e8178716e686c686d6f717578808d9aa7b3c0cddae5d9ccbfb2a6998c7f7366594c403326190d0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60555d6675828f9ba8b5c2cedae2d6cabfb4aa9c8f8276685e5246392d201409000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d34404b546b7885929eabb8c5d1dee4d7cabeb1a4978b7e7164584b3e3125180b0000000914202d3946525d6874808d97a2adbac1cbd4d2c8c0bbb3adaba8a7a6a7a9acafb5bdc2cbd4d6cec4bbb0a69d9184786c605346392e23170b0000000a1723303d4a5663707d8996aab4bfcad6d2cec1b5a89b8e8275685b4f4b55697683909ca9b6c3c7c7c7c7c7c7c3b6aa9d9083776a564c4e5b6874818e9ba7b4c1ced2d6cabfb4aa96897d7063564a3d3023170a0000000007121d2935404b55606d7985929ea9b3becdd7d7ccc0b5ab9e9184796d6d7985919eabb5c0cbd7d4c8bcb1a79e9184786d60554b4035291e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f49535b60626467686d707376797b7d808283858687888889898988878583817e7b76716d67605d554f44403930271e150c030000000000000013202c3946535f6c798692939393939393939393939393939393939393939393939393939393939393939393939393938f8275695c4f4236291c0f0000000000000000000000000000000000000000040d1a242c3845515c67707d89939ea9b0aaa39f969189817a75828f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b000000020a12191f23262728282828282828313e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5144382b2828282828282821201e1a140d05000000000c1825323f4b5865727e8b98a5b1becbd8e4e4d7cabdb1a4978a7e7164574b3e302d363e45494b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4746413a32291e130800000000000d1a2733404d5a6673808d99a6b3c0ccc0b4a79a8d807d808284858687888887868584827f7c79746f6a615f57514940382f251c110800000000000000000007101920272b2e2f3231302f2e2d2b2722292928282b3844505c667784919daab7c4d0dde7dacec1b4a79b8e8174685b4e4135281b0e02000000000000020813202d3946525e686d6e6e6e6e6e6e6e6e6e6e6e6e7078808d949fabb7c3cdd9e4d9d0c4baada2978a7d7063574a3d30241706000000000000040a0f1315161e1e1e1e1e1e1e1e1e1e1e1a26313c47535f6a75828f9ca6b0bbc7d3dacfc5b9aca0968a7e7164594f44382c20150a00000815212e3b4854616e7b8799a3afbbc7d3e0ebded1c4b8ab9e9185796d66615e565d6062656673808d9aa6b3c0cdd9e4d7cabdb1a4978a7e7164574b3e3124180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60535465727e8b98a8b2bdc9d5e1dbd0c5b9ac9f92867a6d6154473b31261a0e020000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d3845515c667985929facb8c5d2dfe4d7cabdb1a4978a7e7164574b3e3124180b00000005111d2935414c56616d7a85929fa5afb9c2cbd4d2cdc5beb9b8b5b3b3b4b6b9bbc0c7cfd4d5cdc4bcb3a99f948a7d70655b5044372b1c11060000000c1925323f4c5865727f8b98a5b2bed0c6c6c6c0b3a69a8d8073675a4d4e5b6874818e9ba7b4babababababababab5a89b8e8275685b4f4d5a6673808d99a6b3c0c6c6c6d0bfb2a5988c7f7265594c3f32261908000000000c18242f3945515d67727f8c97a1adbbc5cfc6c6c7bbafa4998c8073666673808c99a3afbbc7c6c6cdc3b8aca0968b7e72675d51453a3025190d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b656c6e7174777a7d808385888a8c8e909192999595969695959892908e8b87837e7a736d676159514a423930271e150a0000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c8f8275695c4f4236291c0f00000000000000000000000000000000000000010c161f2b37424d57606d7984919da5afbbb4aea8a09d938e857e818f9ba8b5c2cedbe3d7cabdb0a4978a7d7164574a3e3124170b0000000a141c242a2f333435353535353535353e4b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e51443835353535353535352e2d2a251f170f050000000a1724313d4a5764707d8a97a3b0bdd0dbe6e6d9ccbfb3a6998c807366564c41362a2d34393d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3a3936302920170c0200000000000c1926333f4c5966727f8c99a5b2bfccc2b5a89b8f8275737577797a7a7b7b7a7a797775736f6d66625f58534d453f372f261d1710080000000000000000040e19222b32373b3c3f3e3d3c3b3937332d3635353434343f4a54697683909ca9b6c3cfdce9dccfc2b6a99c8f8376695c504336291d10030000000000050c13191d2935414c565e61616161616161616161616161666c7882909ca7b1bcc8d4e0e2d6cabeb3a99a8d8073675a4d402d22170b0000000000060e151b1f21222a2a2a2a2a2a2a2a2a2a2a2a2a2b37434e58626f7c89949fabb7c2cdd8d5c9bdb2a89d9083776b6054483c32271b0f03000916232f3c4956626f7c8995abb5c0cbd7e3e6d9cdc0b3a69a8d8073675d54524c525455546774808d9aa7b3c0cddae1d5c9bdb2a895897c6f6256493c2f2316090013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605355626e7b8896a1acb9c5d2dee0d3c7bbafa3998b7f7265574d42362a1e12050000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2e3a4653606d798698a2aebac7d3e0e3d6cabdb0a3978a7e7064574a3d3124170a000000010d1924303a46525e68727f8b939ea7b0b9c0c8ced3cfc9c6c5c2c0c0c0c2c5c7cbd1d3cfc9c2bbb3aaa1978f82766c6153493f33271b0a000000010e1b2734414e5a6774818d9aa7b4b9b9b9b9b9b9b2a5988c7f7265594c4c5966737f8c99a6adadadadadadadadadada6998c807366594d4c5865727f8b98a5b2b9b9b9b9b9b9b4a79a8e8174675b4e413025190d01000004101d2935404b55606d7985929ea9b3beb9b9b9b9b9b9ac9f93877b6e61616e7b86929facb9b9b9b9b9b9bdb2a89e9185796d60564c41362a1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c777b7e8184868a8d90929897999b9d9e9fa3aba2a2a3a2aaa29f9d9b9795908b857f79706b605c544b423930261c110600000000000013202c3946535f6c7986929facacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca89c8f8275695c4f4236291c0f0000000000000000000000000000000000000008131e28313a46535f69737f8c96a0acb7c1bfbab2aca59e97928b87929facb9c5d2dfe3d7cabdb0a4978a7d7164574a3e3124170b000008121c262e363b3f404242424242424242424b5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e51444242424242424242423b3a36302921170d0200000916232f3c4956626f7c8995aab3becad6e2e9dccfc2b6a99c8f8376685e52463b3026292d303132323232323232323232323232323232322e2d2a251e170e050000000000000c1825323f4b5865727e8b98a5b1becbc4b7aa9e91847767686a676d6e6e6e6e6d676a686663605c54544e46423c3331302d28221a1208000000000000000a15202b343c4347494b4b4a494746443f43434241414141434e586a7683909da9b6c3d0dce9dcd0c3b6a99d9083766a5d5043372a1d100400000000050e161e252a2d303a444c52545454545454545454545454545b666f7c8895a0acb8c4d1dee6dbd0c2b6a99c8f83766953493f33271b0f0300000006101820262b2e2f3737373737373737373737373737313c4754606a76828f9ca6b0bcc7d3d9cec4b8aca095897d7063584e43372b1f1306000a1623303d495663707c8996a3afbcd1dce8e4d7cabdb1a4978a7e7164554b464145474d566975828f9ca8b5c2cfdbded2c5b9aca196877a6d6154473a2e2114070013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053535f697884919eabb7c4d2dde3d7cbc0b5ab9d908376695f53463a2d21150a0000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473b3b3d4855626f7b8895aab4bfcad6e2e3d7cbc0b5ab96897c706356493d3023160a0000000008131e2a36414c56626d75818f959fa6aeb8bcc3c7cbd1d1d1cecdcccdcfd2d1d0cdc7c4bdb9b0a9a19891857a6e615a5041382d22170b00000004111d2935414c566976838f9ca9acacacacacacacaca4978a7e7164574b4b5764717e8a97a1a1a1a1a1a1a1a1a1a1a1a1978b7e7164584b4a5764717d8a97a4acacacacacacacaca99c90837669564c4135291d1105000006131f2c3945515d67727f8c97a1adacacacacacacacb2a89c8f8275695e5e6975828e9ba7b1acacacacacacacada1978c7f73685e52463b31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727f888b8e91939a9a9d9fa2aaa6a8a9abacafb5afafafafb4aeacaaa7a79f9d98928c847d736d665c544b42382e23170c03000000000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b5a89c8f8275695c4f4236291c0f000000000000000000000000000000000000010d19242f3a43505a616e7b86929fa8b2bdc9cbc3bdb8afa9a19e999299a3afbbc7d4e0e3d7cabdb0a4978a7d7164574a3e3124170b00020e19242e3840474b4d4f4f4f4f4f4f4f4f4f4f5764717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e514f4f4f4f4f4f4f4f4f4f4846423b33291f140900000714212e3a4754616d7a8798a2aebac6d3dfecdfd2c5b9ac9f92867a6d61564d42382f2c282327262626272727282829292a24292c2d2e2f2e2b261f180f06000000000000000b1825313e4b5864717e8b97a4b1becac6b9ac9f93867a6d60555d6061616161605d555c595653514b47433e3e3e3e3e3d39332c241a10050000000000030f1b27323c464e54555858575554535049504f4f4e4e4e4d4c535f6a7885919eabb8c4d1deeaddd0c3b7aa9d9084776a5d5144372a1e1104000000020c1620283036393a434241464747474747474747474747474a54606a7783909daab6c3d0dde9ded1c4b7ab9e918478655b5044372b1f12050000040e18222a32373b3c44444444444444444444444444444444434e5863707d89949fabb7c4d0ddd4c8bcb1a79c8f82766a6054473b2e221508000a1724303d4a5763707d8a96a3b0bdc9d6e3e3d6c9bcb0a396897d7063564a3d363946525e687784919daab7c4d0ddded1c4b7ab9e918478685d5246392d2013070013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534d576774818e9aacb6c0ccd8e4dcd1c7b7ab9f95887b6e6155483c31261b0f0000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053484848494f5965717e8b98a4b1bed0dbe7e0d4c7bbafa399887b6e6155483b2e22150800000000020d1925303a44515b606d798390949da4acb1b9bbbfc3c4c6c8ccd2ccc8c6c5c3c0bcb7b2ada69f9791867c6f685e52483e2f261b11060000000613202c3945525d687885919e9f9f9f9f9f9f9f9f9f9f96897c706356494956626f7c899494949494949494949494949494897c6f6356494956636f7c89969f9f9f9f9f9f9f9f9f9f9e928578685e5246392d2013070004101d2935404b55606d7985929ea99f9f9f9f9f9f9f9f9fa1968a7d7063575763707c8995a09f9f9f9f9f9f9f9f9fa99f92857a6d61574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a969a9d9fa4aca9acaeb4b3b5b6b8b9bbc0bbbcbcbcbfbab8b7b4b1abaaa29f96918880786d665c544a3f34281e150b000000000013202c3946535f6c7986929facb9c5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c2b5a89c8f8275695c4f4236291c0f00000000000000000000000000000000000004111d2935414c55616c76828f98a3aebac3ced7cec8c1bbb3adaba39fa3abb5c0cbd7e3e3d7cabdb0a4978a7d7164574a3e3124170b0007131f2a36404a52585a5b5b5b5b5b5b5b5b5b5b5b64717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b5e5b5b5b5b5b5b5b5b5b5b5b54524d453b30251a0e02000713202d3946525e687885929fabb8c5d2deebe0d3c7baaea3988c7f73685e544a423b38342e3333333333343434353536372f35393a3b3b3a37312a21180e030000000000000a1724313d4a5764707d8a97a3b0bdcac7bbafa499887c6f625551535455555453514b4f4c4b4b4b4b4b4b4b4b4b4b4a49453e362c22170c000000000006131f2b37434e5860626564636261605b535d5c5c5b5b5a5a565e626f7c8897a1adb9c6d2dfe9ddd0c3b6aa9d9083776a5d5044372a1d110400000008131e28323a414647504e4d4b4947464142403f3e3e3d3e3e424e586774808d9aa7b3c0cddae6dfd2c5b9ac9f9286796c605346392d20130600000a15202a343c43474951515151515151515151515151515151515154606b7683909ca9b6c3cfdcd9cdc3b7ab9f94887c6f6255493c2f221609000a1623303d495663707c8996a3afbcd1dce8e3d6cabdb0a3978a7d7064574a3e3e414b55616e7a87939facb9c6d2dfdbcec1b5a89b8e827568564c4135291d11050013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534b5764717e8a9aa4afbbc8d4e0e3d3c7bcb1a7998c7f7266584e43372b1b110600000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60545454555559616b76828f9ca9b6c2cfdce9dfd2c5b9ac9f9286796d6053463a2d201307000000000008131e29323f45515d676d7a828d929da0a7acaeb5b6b8b9bbc0bbc0bbb9b8b6b4b1aba8a19e948f857c6f6a5f564c41362c1d140a000000000714212d3a4754606d7a8797939393939393939393939393887b6e6255484754616d7a878787878787878787878787878787877b6e6154474855616e7b8893939393939393939393939397877a6d6154473a2e2114070006131f2c3845515d67727f8c979393939393939393939393939184786c605354606b778390939393939393939393939393988d8074695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b889aa4aaacafb6b6b8babfbfc1c3c4c5c7cbd1c9c9d0cac6c5c3c1bcb8b3aea9a19a938d81786d665c50443e30271d12070000000013202c3946535f6c7986929facb9c5d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cfc2b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000613202c3945515d67717e8a949faab4bfc9cfd6d9d4cdc5beb9b5afacafb5bdc7d1dce8e3d7cabdb0a4978a7d7164574a3e3124170b000b17232f3b47525c6467686868686868686868686868717e8a97a4b1bdcad7e4ddd1c4b7aa9e9184776b686868686868686868686868615e574d42362a1e12050005111e2a36414c566a7683909da9b6c3d0dce9e3d7cbbfb4aa9f92857b6e665c544d4645404140404040404041414242434444404547484847423c332a1f15090000000000000a1723303d4a5663707d8996a3b0bcc9ccc0b5ab978a7e716458585858585858585858585858585858585858585858575550483e33281d1105000000000815222e3b4754606a6f7271706f6e6c656a6969686867676767686d75828f9ca9b3bec9d5e1e9dccfc3b6a99c908376695d5043362a1d10030000010d1925303a444c52545c5b59585654524d4f4d4c4b4a4a4a4b4a515766737f8c99a6b2bfccd9e5e0d3c7baaea399867a6d6053473a2d20140700030f1b26323c464e53555d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d596774808d9aa7b3c0cddadfd3c7bbb0a6988c7f7265594c3f3226190c000916232f3c4956626f7c8995abb5c0cbd7e3e5d8ccbfb2a5998c7f7266594f4b4a4c515c67727e8b9aa4afbbc8d4e0d5c9beb3a9998c7f7266594c3f3024190d010013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534754616d7a87939facb9c6d2dfe4d8cdc2b7aa9d9084776a5f5347382d22170b00000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d616161616162656b707d8a949fabb7c4d0ddeaddd0c3b7aa9d908477675c5145382c1f13060000000000020c17202935404b555d686d78808990959c9fa3aba9abacafb6aeb6afacaba9a7a79f9d96918b827b6f6a60584e443b30241a0b02000000000916232f3c4956626f7c8686868686868686868686868686867a6d60544746525e68767a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a76685e52464753606d798686868686868686868686868686867c6f6356493c30231609000714202d3a4753606d79858686868686868686868686868686867f73665b504f5965727f868686868686868686868686868686877b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86939facb9bbc0c3c5c6cad0ced0d1d2d4d7dcd5d6dbd6d3d2d0cdc8c5bebab2aca49f938f82786d60594f43392e23180c0000000013202c3946535f6c7986929facb9c5d2dfdfdfdfe9e2dbd6d3d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2cfc2b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000714212d3a4754606d7a85919ea1a8afb9bdc4ccd5dad7cfcac7c0bbb9bbc0c7cfd9e3eee3d7cabdb0a4978a7d7164574a3e3124170b000d1926333f4b58646e73757575757575757575757575757e8a97a4b1bdcad7e4ddd1c4b7aa9e918477757575757575757575757575756e695e52463a2d20140700010d192530414e5b6774818e9aa7b4c1cfdae5e7dcd1c6baada2978f82786d665f5753514b4e4d4c4d4d4d4d4e4e4e4f5050514b51535455534d453c31261a0e0200000000000916232f3c4956626f7c8995a2afbcc8d2c0b3a6998d8073666464646464646464646464646464646464646464646464615a5045392d211408000000000916222f3c4955626f7c7f7e7d7c7a7978777676757474747474767a818e949eaabbc4cfdae6e8dbcec2b5a89b8f8275685c4f4235291c0f02000005111d2a36414c565e616968666463615e565c5a595857575758545c606974808d9aa7b4c0cddae7e3d7cbbfb4ab93877a6d6054473a2d2114070006131f2b37434e585f626a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a74808d9aa7b3c0cddae3d8ccbfb2a5988c7f7265594c3f3226190c000815222e3b4855616e7b8899a3afbbc7d3e0e9dccfc2b6a99c8f83766b60595757555d606d7984919eacb6c0ccd8dfd2c6b9ada197887c6f6255493c2f221608000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347525e687783909daab7c3d1dce7ded1c5b8aca095887c6f6253493f33271b0f03000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6e6e6e6e6e6e6f71757d85929fa6b0bbc7d3dfe3d7cbc0b5ab9b8e817468554b4034281c1004000000000000050e18242f3a434c565d666d747d838a8f92999a9c9e9fa4a1a1a1a49f9e9d9a9795908b847e776e6960584e463c32291e110800000000000815222e3b4754606a6f79797979797979797979797979797976685d5245414c565e686e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e685e564d4145515d67767979797979797979797979797979796f6b6054483b2f2215090006131f2c3845515d676d78797979797979797979797979797979736d63544a4a56626d72797979797979797979797979797979796e695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d677885919eabb8c4ccd2d2d3d6d6d3d2d1d0cfcfcfcecfd0d2d3d6dcd8d4d0cac4beb6afa69e948d80736b61554b4034281c110600000013202c3946535f6c7986929facb9c5d2dfecf3e9e0d7d0cac6c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c2b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000714212d3a4754606d7a818991969da5adb2bac0c9ced8dad6d1cbc7c5c7cbd1d9e1ebf5e3d7cabdb0a4978a7d7164574a3e3124170b000d1a2734404d5a6773808282828282828282828282828183909da9b6c3d0dce9dfd2c5b8ac9f928681828282828282828282828282817b6e6154483b2e2115080000081825323e4b5865717e8b98a8b2bdc9d5e1ede2d6cabeb3a99e948e81786e6963605c545a5a5959595a5a5a5b5b5c5c5d5e555d6061625f574d42372b1e120600000000000915222f3c4855626f7b8895a2aebbc8cfc2b5a89c8f82757171717171717171717171717171717171717171717171716c6155493d3023170a000000000d192633404c5966737f8b8b8a8887868584838282818181808183868e939ea6b0bbcdd6e1ebe6dacdc0b3a79a8d8074675a4d4134271a0e0100000713202d3946525e686d767573716f6e686a686765646464646566666d717b85929fabb8c5d2deebe3d7cbbfb4ab94877a6d6154473a2e211407000815212e3b47535f6a6f77777777777777777777777777777777777777777777808d9aa7b3c0cddae5d8cbbfb2a5988c7f7265594c3f3226190c000713202d3a4653606d7986929facb9c5d2dfecddd0c4b7ab9f94897d706b66646465676d74808d96a1acbec7d2ddded1c4b8ab9e9185786c605346392d201306000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474c566773808d9aaab4bfcbd7e3e0d4c8bcb1a7998d8073655b5044372b1f1206000000000013202c3946535f6c7986929facb9c5d2dfe1d4c8bbaea195887b7b7b7b7b7b7b7c7e82899297a2adb8c2ccd8e3e0d4c7bbafa3998a7e7164574b3e2e23180c000000000000000007131d28313a444c545c606b6f787d82868a8d9091939a9495949a9392908d8b87837e79716c655e574e463d342a20170d00000000000006131f2b38434e5860626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d564c413a444c565e616161616161616161616161616161615e564d443b404b555d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6360594f43382c1f13070004101d2935404b555d606b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c66635b514245515b62656c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c615f574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55697683909ca9b6c3cecccbc9d0cac6c5c4c3c3c2c2c2c2c3c5c7cbd0d3d8dbd6d0c7c0bbb0a69f93887d70675c5145382e23170b00000013202c3946535f6c7986929facb9c5d2dfecede2d7cec6bfbab8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b5a89c8f8275695c4f4236291c0f0000000000000000000000000000000000000613202c3945515d676d747d848e939ea1a8afb9bdc4ccd2d9dcd7d4d2d4d7dce3ebf3f0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a77848e8e8e8e8e8e8e8e8e8e8e8e8e90959fabb7c4d1ddeadfd3c6baaea298928e8e8e8e8e8e8e8e8e8e8e8e8e887c6f6255483c2f22150900000815222f3b4855626e7b8896a1adb9c5d2dfeae6dbcfc5bbb0a69e938e827b75706d66686766666666666767676868696a6a6b676d6e6e695f53473a2e21140800000000000815212e3b4854616e7b8794a1aebad1d1c4b8ab9e91857e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7164574a3e3124170b000000010d1a2734404d5a6773808d97969599939291908f8f8e8e8d8d8e8f92989ea5afb8c1ccdfe8eee2d5c9beb3a9988b7e7265584b3f3225180c0000000714212e3a4754616d7a8281807e7c7a787775737271717071717375797e849197a2adbac6d3dfece0d3c7baaea399867a6d6053473a2d201407000916222f3c4955626f7c8384848484848484848484848484848484848484848385929eabb8c5d1dee5d8cbbfb2a5988c7f7265594c3f3226190c0006121f2c3844505c667784919daab7c4d0dbe7dfd3c7bbb0a69e92857d7673717172747a818d929da8b2bdd0d9e4d4c8bdb2a89a8e8174655b5044372b1f1205000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474a5663707d8998a3aebac7d3e0e5d9cec3b7ab9e9184786c605346392e23170c000000000013202c3946535f6c7986929facb9c5d2dfecd5c9bcb0a4988d88878787878788888b8f949fa2a9b3becad4dee4d9d0c5b9ac9f92867a6d6154473a2e2114070000000000000000010c161f28323a424b515960656c70757a7e808385868788888887868583817e7b76716d67605b534d453d342b22180e05000000000000030f1b27323d464e54566060606060606060606060606060605f524c443a323b444c5254545454545454545454545454545454524c443b3239434b515f60606060606060606060606060606056544f473d32271b0f0300000c18242f39434b51535e60606060606060606060606060606059575149403f485156586060606060606060606060606060605f55534d453b31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f424e5b6875818e9ba8b4c1c1bfbebdbbbebab8b7b7b6b5b5b5b5b7b8babfc6c7cdd4dcd9d2ccc1bbafa49a9184796d60544a3f34281c1003000013202c3946535f6c7986929facb9c5d2dfece7dbd0c6bcb4aeacacacacacacacacacacacacacacacacacacacacaca89c8f8275695c4f4236291c0f00000000000000000000000000000000000004111d2935414c555d606b707a818991969da5acb2bbc0c7d0d8dde0dfe0e3e8eef5fdf0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909b9b9b9b9b9b9b9b9b9b9b9b9d9fa7b1bcc7d3e0ece2d6cabfb4aaa29f9b9b9b9b9b9b9b9b9b9b9b9b95887c6f6255483c2f22150900000814212e3a47535f697884919eabb7c3ced9e4ece1d7cdc1b8afa59e949086817d797775747373737373737474757576777778797a7b7b6e6255483b2f22150800000000000714212e3a4754616d7a8794abb5bfcbd2c6b9ada197918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b85786b5e5245382b1f12050000010e1b2734414e5a6774818d9aa3aba49f9e9d9c9c9b9b9a9a9a9a9c9fa3aaafb7c1cad3def1ecdfd2c6b9ada197887c6f6255493c2f2216090000000915222f3c4855626f7b888e8c8b8987858382807f7e7d7d7d7e8082858a9196a1a9b3becad6e2ecdfd2c5b9ac9f9286796c605346392d20130600091623303c4956636f7c899090909090909090909090909090909090909090909297a1adb9c6d2dfe5d8cbbfb2a5988c7f7265594c3f3226190c0003101c28343f4a546774818e9aaab4bfcad6e3e4d8cdc2b9ada2979289837f7e7d7e81858e939da4aebac4cee2dcd1c5b8aca096897c6f6353493f33271b0f03000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474753606d7986929facb9c5d2dfecded2c5b9aca196897c6f63544a3f34281c10030000000013202c3946535f6c7986929facb9c5d2dfecd8ccc0b4a99f989594949494949495989c9ea6adb3bcc5d0dce8ddd2c7beb1a79c8f8275685d5246392d201307000000000000000000040d162028303940454f535b6063686d71747678797a7b7b7b7a79787674716e6865605c555049413b332b2219100700000000000000000a16202b343d4347495353535353535353535353535353535345413a3229323b41464747474747474747474747474747474746413b322931394045535353535353535353535353535353534948433d342b21160a00000007121d273139404547525353535353535353535353535353534c4b464037363f454a4b535353535353535353535353535353534846423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2633404d596673808c99a6b3b6b4b3b1b0afb3aeababaaa9a9a8a8a9aaacaeb4b7bcc2cad2dbddd8ccc0b6aca1968c7f72665c5044382b1f1206000013202c3946535f6c7986929facb9c5d2dfece2d6cabfb4aaa29f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c8f8275695c4f4236291c0f000000000000000000000000000000000000010d19242f3a434c515961676d747d848e939ea1a8afb6bec4ccd2d9e2e8eef4f9fffdf0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909da8a8a8a8a8a8a8a8a8a8a8a9abb1b9c2cdd8e4f0e7dbd0c5bcb4aeaca8a8a8a8a8a8a8a8a8a8a8a295887b6f6255483c2f221509000006121e2b37424d576774818d9aa7b1bcc8d4e0ebe9dfd3cac1b7afa69f98928e8986838181807f80808080818181828383848586868784786b5e5145382b1e1205000000000713202d3a4653606d798699a3aebbc7d3c9beb2a9a19e97979797979797979797979797979797979797979797979185786b5e5245382b1f12050000020f1b2835424e5b6875818e9ba8b5afacabaaa9a9a8a7a7a7a7a7a9acaeb4bcc1c9d3dce5ede2d8cec5b8ab9e9285796c605346392d2013060000000a1623303d495663707c89969997969892908f8d8c8b8a8a8a8b8c8f92979ea1a8b2bbc5d0dbe6eaddd1c4b7aa9e918477655b5044372b1f120500091623303c4956636f7c89969d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea1a9b3bec9d5e2e5d8cbbfb2a5988c7f7265594c3f3226190c00000c17232e3e4a5764717d8a98a2aebac7d1dce8ded6cabeb3a9a29e94908c8a8a8b8e92979da5aeb6c0ccd6e0d5c9bdb2a89d9184776b605441382d22170b00000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534745515d6776838f9ca9b6c2cfdbe6e1d5c9bdb2a89a8d8174665c5044382c1f12070000000013202c3946535f6c7986929facb9c5d2dfecdcd1c6bbb1a9a4a1a1a1a1a1a1a1a2a4a8aab0babec5ced7e1ddd8ccc0b6ac9f95897d7063564c4135291d110500000000000000000000040e161e272e343d41495053565d60646769676d6e6e6e6e6e6d666a6764615e5653514b443f382f2921191007000000000000000000040f19222b32383b3c4646464646464646464646464646464639352f2820293036393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3936302920272f3538464646464646464646464646464646463c3b38322b22190f04000000010b151f272f35383a45464646464646464646464646464646403e3b352e2d343a3d3f464646464646464646464646464646463b3a36312921170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4aaa9a7a6a5a3a2aaa29f9e9d9c9c9c9b9c9d9fa3aaabb0b8c0c9d2dfddd2c7beb2a89e9285786d6053463a2d201308000013202c3946535f6c7986929facb9c5d2dfecdfd3c6baaea29892929292929292929292929292929292929292929292928f8275695c4f4236291c0f0000000000000000000000000000000000000008131e28313a41454f555d606b707a818991969fa4acb2bbc0c7d0d8dde4ebf4f9f1f0e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab5b5b5b5b5b5b5b5b5b5b6b7bcc2cbd4dee9f5ece2d7cec5bfbab8b5b5b5b5b5b5b5b5b5b5aea295887b6f6255483c2f2215090000020e1a26313d495663707c8995a0acb8c4cfdae5f0e5dcd2c9c1b8b0aaa39f9b9992908e8d8d8c8c8c8d8d8d8e8e8f8f90919192999185786b5e5245382b1f07000000000006131f2c3845515c667986929facb9c5d2cfc4bbb2adaba4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49e9185786b5e5245382b1f12050000020f1c2935424f5c6875828f9ba8b5bbb9b8b7b6b5b5b4b4b4b3b4b6b8babfc6ced3dbe5ebe4dcd0c6bcb0a69a8e8174665b5044382b1f12060000000b1824313e4b5764717e8a97a4a4aaa29f9d9b9a989797979798999b9ea1a9adb2bac4cdd7e1ece9dbcfc2b5a89c8f82756953493f33271b0f0300091623303c4956636f7c8996a2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadb3bbc5cfdae6e5d8cbbfb2a5988c7f7265594c3f3226190c00000614202d3a4753606d7985929fabb5c0cbd7dfe6dbcfc5bbb3ada69f9c999797989b9fa2a9afb7c0c8d2ded7cec6b9ada1968b7f7265594f432f261b110600000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605347404b5566727f8c99a9b3becad6e2e5dacec4b8ab9e9285796d6053463a2f24180c0000000013202c3946535f6c7986929facb9c5d2dfece2d7cdc4bbb4b0aeaeaeaeaeaeaeafb1b5b7bbc1cad0d7e0dcd7cbc3bbafa49a9083766b6054443a3024190d010000000000000000000000040c151d23282f383f44464c5254575a555c606161626161605c545a5854524d47454039332d261d170f07000000000000000000000007101920272b2e2f393939393939393939393939393939392c29241e171e252a2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a251e171d24292c39393939393939393939393939393939302f2c27211910070000000000030d151d24292c2d3839393939393939393939393939393933322f2a2323292e3132393939393939393939393939393939392e2d2a261f170f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c89969f9e9c9b999896959498929190908f8f8f8f9092989c9fa6afb7c0cdd6e0d9d0c4b9ada197897d7063564a3d2f24190d010013202c3946535f6c7986929facb9c5d2dfebdfd2c5b8ac9f928685858585858585858585858585858585858585858585858175685b4f4235281c0f00000000000000000000000000000000000000010c161f282f353d434c515960676d747d848d939aa1a8afb6bec4ccd2d9e2e8e4e4e4e3d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c1c1c1c1c1c1c1c1c1c3c4c7cdd4dde6f0f2f3e9e0d7d0cac6c5c1c1c1c1c1c1c1c1c1bbaea295887b6f6255483c2f2215090000000916222f3b4854606b7783909da8b2bdc9d5dee8eee4dbd2cac2bcb4aeacaba39f9d9b9a99999999999a9a9a9b9b9c9d9d9e9f9f9285786c5f52452e23180c000000000004101c2834404b546b7885929eabb8c5d1d6cdc4beb9b8b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ab9e9185786b5e5245382b1f1205000003101d293643505c6976838f9ca9b6c2c6c5c4c3c2c2c1c1c0c0c1c2c5c7cbd0d8e0e5e5e2d9d2cbbfb4aa9e94887c6f62544a3f33281c0f030000000c1925323f4c5865727f8b98a5b1b4aeabaaa8a6a5a4a4a3a4a4a6a8abadb3b9bdc4ccd6dfe9e9e0d4c8bcb1a7998c7f7266594c3f2d22170b0000091623303c4956636f7c8996a2afb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b8b9bec5cdd7e1ece5d8cbbfb2a5988c7f7265594c3f3226190c000006131f2c3845515d6774818d99a3afbbc3cdd7dfe1d7cdc5beb9b0aba9a6a4a4a5a7abadb3bbc0c9d2dad9d0c6bcb0a69e9184796d6053463d3220140a0000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473c4956626f7c8997a2adbac6d3dfebdfd2c6b9ada1978a7d7063554b4035291d100400000013202c3946535f6c7986929facb9c5d2dfece9dfd6cdc6c0bcbbbabababababbbbbec2c3c7ccd6dbdfd8d1cbc1b9b0a69f93887c6f62594f4432281e130800000000000000000000000000030b12181d262d33373a4145474a4d4b5153545555555453514b4e4b4746413b38342f27221b140b0500000000000000000000000000070f161b1f22232d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d19130d14191e2021212121212121212121212121212121201e19140d12181d1f2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d23221f1b160f0700000000000000030b12181d1f202b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2625221e19181d2224252d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c22211e1a140d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b879992918f8e8c8b8a888786858484838282828284868a90949da5afbbc4cfdae2d5c9beb3a99b8e817468564c4135291d11040013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada09386797979797979797979797979797979797979797979797979756f65594d4134271b0e0000000000000000000000000000000000000000040d161e2429313a41454f555d606b7079818891969fa4acb2bbc0c7d0d8ddd8d8d8d8d7cabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c3cecececececececed0d1d3d8dee6e5e5e5e5e5e9e2dbd6d3d2cecececececececec8bbaea295887b6f6255483c2f2215090000000713202c38444f5964717e8b96a1adb9c1ccd6dfe8ede4dcd4cec6bfbab8b4aeacaaa8a7a6a6a6a6a6a6a7a7a8a8a9aaaaabac9f9285796c5f4b4034281c100400000000000c18232e45515e6b7884919eabb7c4d1ded6cfc9c6c4bebebebebebebebebebebebebebebebebebebebeb8ab9e9185786b5e5245382b1f1205000004111d2a3744505d6a7783909daab6c3d0d1d0cfcfcececdcdcdcdcfd2d3d6dce2e0dfdad5d0c7c0baaea3988f82756a5f5442382d22170b000000000d1a2633404d596673808c99a6b3bebab8b6b5b3b2b1b0b0b0b1b3b5b8b9bec5c9cfd6dee8e8e0d7cec5b8aca095887c6f6255483c2f2215060000091623303c4956636f7c8996a2afbcc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5c6c9cfd7dfe9f3e5d8cbbfb2a5988c7f7265594c3f3226190c000004101d2935404b55616e7b87929fa7b1bbc5cdd6dedfd7cfcac2bcb7b6b2b1b0b1b4b8babec5cdd2dbdbd2c7beb4aa9f948b7e71675c5145382c1f13020000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a4653606c7985929fabb8c5d2dee5e2d5c9beb3a99b8e8175675d5145392c1f130800000013202c3946535f6c7986929facb9c5d2dfe5e5e5dfd7d1ccc9c8c7c7c7c7c7c7c8cbcfd0d3d7dbd6d3cfc6bfbab0a79f948d80736a6054473d3320160c02000000000000000000000000000000070b141b22272b2f35393a3e414045464748484847464540413e3b3936302c29231d17110a02000000000000000000000000000000040a0f1315162020202020202020202020202020201413110d0802080e11141414141414141414141414141414141414110e0802070c1013202020202020202020202020202020201615130f0a0400000000000000000001070c1013141f202020202020202020202020202020191816120d0c11151718202020202020202020202020202020201514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c78878886848381807e7d7c7a79787877767675757677797d828e939da9b2bdc9d5e1dacfc4b7aa9e918477685d5245392c2013060013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68655d53483d3125180c000000000000000000000000000000000000000000040c13191f282f353d434c515960676d747d848d939aa1a8afb6bec4ccd2cbcbcbcbcbcabdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c3d0d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d5c8bbaea295887b6f6255483c2f22150900000003101b27323d4653606d7984919ea5afbac4ccd6dfe5ebe6e0d8d0cbc7c5bfbab9b6b4b4b3b2b3b3b3b3b4b4b4b5b6b6b7b8ac9f938679665c5145382c1f13060000000000071e2a3744515d6a7784909daab7c3d0dde0dad5d2d1cacacacacacacacacacacacacacacacacacacac4b8ab9e9185786b5e5245382b1f1205000004111e2b3744515e6a7784919daab7c4cad0cfd1d2d4d8ddd8d8d9d9d9d9d9ddd8d4d2cec9c4beb6afa49f92867c6e62584e432f261c1106000000010e1b2834414e5b6774818e9aa7b4c1c6c5c3c2c0bfbebdbdbdbebfc2c5c6cacfd5dae0e6e3dcd7cec5bcb1a79d9083776a5f53473b2e2115080000091623303c4956636f7c8996a2afbcc9d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d1d2d5dae1e9e4e4e4d8cbbfb2a5988c7f7265594c3f3226190c0000000c18242f3946535e6973808d95a0a9b3bbc4ccd4d9e0dbd6cdc7c4c3bfbdbdbec1c5c6cacfd7dfd7d0cac0b6aca2989082776c60554b4034281c10040000000013202c3946535f6c7986929facb9c5d2d9d9d3c6b9ada093867a6d6053473a44505b6675828f9ba8b5c2cedad9d9dacfc5b8ac9f9285796d6053473a3024190d01000013202c3946535f6c7986929facb9c5d2d9d9d9d9d9d9d9d9d9d4d4d4d4d4d4d4d5d7dbd6d3d2d0cac6c1bcb4aea69e958f82786d60584e43352b210e040000000000000000000000000000000000020a11171b1f24292c2d312e34383a3b3b3b3b3b3a38342e312e2d2a251f1c18120b060000000000000000000000000000000000000003060809131313131313131313131313131313070704010000000205070808080808080808080808080808080807050200000000040613131313131313131313131313131313090907030000000000000000000000000000040607121313131313131313131313131313130d0c0a06020105090b0c13131313131313131313131313131313080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666f7c7b797776747372706f6e6d666b6a6969696869666d7077818e96a1adb9c5d2dfdfd2c6b9ac9f93867a6d6054473a2d2114070013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b59534b42372c2015090000000000000000000000000000000000000000000001080d161e2429313a41454f555d606b7079808891969fa4acb2bbc0bebebebebebebebdb0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7c3ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc8bbaea295887b6f6255483c2f221509000000000b161f2c3844515c66717e8a939ea8b2bac4cdd5dae0e4eae2dcd6d3d1cbc7c5c3c1c0c0bfbfbfc0c0c0c1c1c2c2c3c4bbafa49a86796d6053463a2d2013070000000004101d2a3743505d6a7683909da9b6c3d0d8d8d8d8d8d8d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d1c4b8ab9e9185786b5e5245382b1f1205000005121f2b3845525e6b7885919eabb8babfc0c3c4c6c8ccd2cbcbcccccdccccd2ccc8c6c3bdb9b2aca49f928b7f726a5f53463c321d140a00000000020f1c2935424f5c6875828f9ba8b5c2ced2d0cecdcbcacacacacbccced1d2d6dae1e0dfdbd6d1cbc4bcb3a99f958a7e7164584e43372b1f12060000091623303c4956636f7c8996a2afbcc9d5d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8cbbfb2a5988c7f7265594c3f3226190c00000007121d2a36424d57606d79839197a2a9b2bac1c8cdd3d6dbd8d3d0cfcccacacbced2d3d6dbd8d4cec5bebaafa49a92867b6e655b5043392e23180c000000000013202c3946535f6c7986929facb9c5ccccccccc6b9ada093867a6d6053473a3f4a5465727e8b98a8b2bdc9ccccccccccc6baaea2988a7e7164564c4135291d1105000013202c3946535f6c7986929facb9c5cccccccccccccccccccccccccccccccccccbcbd0cac7c5c3bebab8b0aaa39f948f83796d665c50463d32231a0f0000000000000000000000000000000000000000060b0f13191d20212423282c2d2e2e2f2e2e2d2c28232521201e1914100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54606b6f6e6d6669686665636261605c545d5d5c5c5c545c60656d7984919eabb8c4d1dee0d4c8bbafa49a897c6f6356493c302316090013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605352525252525252525252525252525252525252524f4d48423930251b0f04000000000000000000000000000000000000000000000000040c13191f282f353d434b515960676d747d848d939aa0a8afb6b1b1b1b1b1b1b1b1b0a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab7bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbbaea295887b6f6255483c2f2215090000000004101c2834404a54616c75818e96a1a8b2bbc1c9cfd4d9dedfe2e3e0dcd7d3d2d0cecdcccccccccccdcdcdcececfd0ccc0b6a093877a6d6054473a2d2114070000000003101c2936434f5c6976828f9ca9b5c2cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc4b8ab9e9185786b5e5245382b1f1205000005121f2b3744505b657985929fa8acaeb4b3b6b8b9bbc0bdbebfbfc0c0c0bfbec0bbb9b7b2aca8a09a938c80736d62584e43342a200b020000000003101d2a3643505d697683909ca9b6c3c6c8ccd2d1d2d5dad6d7d7d9d9d9d9d8dcd6d3d2d0cac7c0bbb2aaa2979083786c6053463c32261b0f030000091623303c4956636f7c8996a2afbcc9cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbbfb2a5988c7f7265594c3f3226190c000000010e1a25313b45515d676e7b859297a0a8afb8bcc3c7cad0d2d3d7dcd8d7d7d8d9ddd8d4d2cdc7c2bcb3aea39f93887e70695f53493f30271d1207000000000013202c3946535f6c7986929facb9bfbfbfbfbfbfb9ada093867a6d6053473a3b4855616e7b8896a1acb9bfbfbfbfbfbfbfbfb4aa9c8f8275685d5246392d201409000013202c3946535f6c7986929facb9bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbebdbfbab8b6b4aeaba69e98928c82796d675d544a3f342b2011080000000000000000000000000000000000000000000003080d11131417181c1f202122222221201f1c18181414110e08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424f59606361605c545b595857555453514b51504f4f4f4b51535c6774818e9aa7b4c1cddae4d8ccc0b6ac978a7d7064574a3d3124170a0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053474646464646464646464646464646464646464642413d3730271e1409000000000000000000000000000000000000000000000000000001080d161e2429313a41454f555d606b7079808891969fa4aca5a5a5a5a5a5a5a5a5a4978a7d7164574a3e3124170b00111e2a3744515d6a7784909daab2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2aea295887b6f6255483c2f22150900000000000c18232e3942505a616d7a849196a1a9afb9bdc4c8cdd2d3d6dbd9d9dadadbdadadad9d8d7ddd7d4d2d1cfced1cbc7baada094877a6d6154473a2e21140700000000020f1c2935424f5c6875828f9ba8b5bebebebebebebebebebebebebebebebebebebebebebebebebebebebeb8ab9e9185786b5e5245382b1f120500000613202d394653606c798693989c9fa2aaa7a9abacafb6b1b1b2b2b3b3b3b3b2b6afacaaa8a19e9691887f736e645b51463c3122190e000000000003101c28343f4a546b7784919eaab1b6b9bbc0c3c5c6c9cfcbcbcccccdcccccbd0cbc7c5c3bebab5afa8a19892857b6e665b5044382a20150a000000091623303c4956636f7c8996a2afbcbebebebebebebebebebebebebebebebebebebebebebebebebebebebebeb2a5988c7f7265594c3f3226190c0000000009141f2935404b555f696f7c8591969ea5abb1b8babfc3c5c7cbd1cccccccdccd2ccc8c6c2bcb8b0aaa29f918c7f726c61574d41382d1e150b00000000000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2ada093867a6d6053473a3a47535f697884919eabb2b2b2b2b2b2b2b2b2b2ac9f92867a6d6154473b30251a0e020013202c3946535f6c7986929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b1b4aeaca9aaa29f9a938f867f786d675d554b42382e22190f0000000000000000000000000000000000000000000000000001040707070c10131314151515141313100c0708070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3d464f54565553504a4e4d4b4a49474645404443434241464b51596673808c99a6b3bfccd9e8ddd2beb1a4978b7e7164584b3e3125180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4847433c343534312c251e150c0200000000000000000000000000000000000000000000000000000000040c13191f282f353d434b515960676d747d848d939a9898989898989898989898978a7d7164574a3e3124170b00111e2a3744515d6a7784909da6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a295887b6f6255483c2f221509000000000007121c27303e46525d686e7b8491969ea5adb2b8bcc2c5c6cad0cccccdcecececdcdcccccbd2ccc7c6c4c3c1bfbfbab9aea194877b6e6154483b2e21150800000000020e1b2835414e5b6874818e9ba7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ab9e9185786b5e5245382b1f120500000714202d3a4753606d7984888b8f9298979a9c9e9fa4aca4a5a5a6a6a6a6a6a5aca49f9d9a96918b847d736d645c52493f332a201007000000000006121f2b3844505c667885929d9fa7aaacafb6b6b8b9bebdbebebfc0c0c0bfbebebfbab8b6b3adaba39f9691867d70695f544a3f3328180e04000000091623303c4956636f7c8996a2afb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a5988c7f7265594c3f3226190c00000000030c18242f39434d57606a6f7c848e939da0a7acaeb4b7b9babfbebfbfc0c0bfbfc0bbb9b6b1aba69f98928a7f726d635a50453c2f261b0c0300000000000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a093867a6d6053473a37424d576774818e9aaca6a6a6a6a6a6a6a6a6a6a6a3998b7e7265574d42362a1e12050013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a5a5a5a4aaa29f9d9a98928e88827c726c665d554b433a30261c10070000000000000000000000000000000000000000000000000000000000000004060708080808080706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2b343d4348494846443f41403f3d3c3b3a3836383f44464c52555d606b75818e9ba8b5c1cedbe5d8cbbeb2a5988b7f7265584c3f3225190c0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55534e463c322625201b140c0300000000000000000000000000000000000000000000000000000000000001080d161d2429313a40454f555d606b707980878b8b8b8b8b8b8b8b8b8b8b8b8b8a7d7164574a3e3124170b00111e2a3744515d6a778490999999999999999999999999999999999999999999999999999999999999999999999999999999999995887b6f6255483c2f2215090000000000000b151e2935414c565f696e7b848f939ea1a8acb1b5b8babebebfc0c0c1c1c1c0c0c0bfbebdc0bbb9b8b6b4b2b4aeacaaa194887b6e6155483b2e22150800000000010e1b2734414e5a6774818d9aa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59e9185786b5e5245382b1f1205000006131f2c3845515c676d777b7e8285888b8d9091939a9697989899999a999998979a93908d89847f79706b635b524a40372d21180e0000000000000713202d3a4653606d78868b90959a9d9fa4aca9abadb3b0b1b2b2b3b3b3b3b2b1b4aeaca9a9a29f99928e847c706b60574d42382d22170600000000091623303c4956636f7c8996a2a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5988c7f7265594c3f3226190c000000000007121d27313c454e58606a6f7a818990959b9fa2aaaaacaeb4b1b2b3b3b3b3b2b6afacaaa79f9d948f857e726d635b51483e332a1d140a0000000000000013202c3946535f6c79869299999999999999999999999993867a6d6053473a313e4b5764717e8a9a9999999999999999999999999999908376695e52463a2d2014070013202c3946535f6c798692999999999999999999999999999999999999999999989897969892908d8a85817c756e6a605b544b433a31281e150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b19222b32383b3c3b3a38342e3332302f35383b42464a5053565e61676d737d87929facb9c5d2dfe4d7cbbeb1a4988b7e7165584b3e3225180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6767676767676767676767676767676767625f584e43372b1f120f0902000000000000000000000000000000000000000000000000000000000000000000040c13181f282f353d434b515960676d747c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b6e6155483b2e22150800111e2a3744515d6a77838c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c887b6f6255483c2f221509000000000000030c1924303a444d575f696e7a818b91969da0a7a8abadb3b1b2b3b3b4b4b4b4b3b3b2b1b0b5afacaba9a8a6aba39f9d9b95887b6f6255483c2f22150900000000000d1a2733404d5a6673808d989898989898989898989898989898989898989898989898989898989898989898989185786b5e5245382b1f1205000004101c2934404b555c60696e7275797b7e8083858688898a8b8c8c8d8d8d8c8b8a898684807c78726d676059514940382e251b0f0600000000000006121f2b3844505c666d7a7e83888d90939a9a9c9ea1a9a4a4a5a6a6a6a6a6a5a4aaa39f9d9a97928d87817a6f6a60594f453c2f261c110600000000091623303c4956636f7c899698989898989898989898989898989898989898989898989898989898989898989898988c7f7265594c3f3226190c0000000000010b151f2a333d464e585f686d757d83898e92989a9d9fa3aba4a5a6a6a6a6a5aca49f9d9995908a827b716c625b51493f362c21180b020000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c867a6d6053473a2e3a4754616d7a888c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b6e6154483b2e2115080013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a89888583807d79746f6a625f58504a423a31281f160c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101921272c2f302e2d2b28262b3136394045474d52545c6063686e737980879299a3aebbc7d3e0e4d7cabdb1a4978a7e7164574b3e3124180b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada09386797474747474747474747474747474747474746f6a5f53473b2e21150800000000000000000000000000000000000000000000000000000000000000000000000001070d161d2429313a40454f555d606a6f72727272727272727272727272726e695f53463a2d211407000b1825323e4b5865717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d6154473a2e2114070000000000000008131e28323b454d575f686d757e848a9095989c9fa2a9a4a6a6a7a7a8a7a7a7a6a5a4a3aba49f9e9c9b99979992908e8b887c6f6255493c2f22160900000000000d192633404c5966737f8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b85786b5e5245382b1f12050000000c18232f39434b51575f6165666d6f71747678797b7c7e7e7f7f808080807f7d7c7a7774706c65605c554f4740372e261c12090000000000000003101c28343f4a545d676d72777c8083878a8d9092979597989899999a99999897969892908d8985807b746d6860584f473d332a1d140a0000000000091623303c4956636f7d898b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7f7265594c3f3226190c000000000000030d18212b343d464e565d606b70777d82868a8d90929996979999999a9999979a93908d88837d766e69615a51493f372e241a0f0600000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f786d6053463a2d3946525e68727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6255483c2f221509000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7c7b797674706d67625f58534e443f382f281f160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f22232220252a31373b42464b5153575e61666d70757a80858c9299a3abb5bfcbd7e3e2d6cabfb4aa96897d7063564a3d3023170a0013202c3946535f6c7986929facb9c5d2dfe7dacdc1b4a79a8e818181818181818181818181818181818181817c6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000040c13181f282f353d434b515860626565656565656565656565656565615f574d42362a1e1205000b1724313d4a56626d7173737373737373737373737373737373737373737373737373737373737373737373737373737373737373736d685e5246392d20130700000000000000020c16202a333c454d565e616c71787e83888b8f9297969899999a9b9b9b9a9a9999989796999391908e8c8a888684817e7c786d6053463a2d20130700000000000915222f3c4855626f7c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7164584b3e3125180b0000000007121d27313940454d5355545c6062646769676d6e70717272737373737372716f6d676763605b53514b433d352e251c140a0000000000000000000b17232e38424c555d60656a6f73777a7e81838587898a8b8b8c8d8d8d8c8b8b89878683807d79746e69605d564e463d352b21180b0200000000000814212e3b4754616e7a7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7c6f6255483c2f22150900000000000000060f19222b343c444c525960636b70757a7d80838688898b8c8c8d8d8c8c8b898683807c76706b615f5750483f372e251c12080000000000000000000c1825323e4b57636d727373737373737373737373737373736d665c5144382c36414c56626d7273737373737373737373737373737373736f6a5f53473a2e211508000c1825323e4b57636d7273737373737373737373737373737373737373737372727271706e6c666763605d55544e47433c332d261d160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13141b222730363c43474d53555d6064696e72787d82868c92979fa3abb4bdc6d1dce7e0d3c6baaea298887b6e6155483b2e2215080013202c3946535f6c7986929facb9c5d2dfecdbcec2b5a99d938e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000001070d161d2429313940454e5456585858585858585858585858585855534d453b31261a0e02000915212e3a45505a62656666666666666666666666666666666666666666666666666666666666666666666666666666666666666666615e564c41362a1d11050000000000000000040e18212a333c444c525a62666d71777b7f828587898b8c8d8d8e8e8e8d8d8d8c8b8a8988868483817f7d7b797774726f6d665c5044382b1f120600000000000815212e3a47535f6a6f727272727272727272727272727272727272727272727272727272727272727272727272716c6156493d3024170a00000000010b151f272f343b4246484a505355585a555c6061636465656666676666656462605d5556535049454039312b231c130a0200000000000000000006111c26303a434c5154585f6267686d717476787a7c7d7e7f7f808080807f7e7c7b797674706d67625f57524c443d342b23190f060000000000000714202d3946525e686e72727272727272727272727272727272727272727272727272727272727272727272727272726f6a5f53473b2e2115080000000000000000071019222a323a41454f54596063676d717477797b7d7e7f808080807f7e7c7a77736f6a636159534d453e362d251c130a000000000000000000000a16222f3a46515b6366666666666666666666666666666666605c544a403428303a44515b62656666666666666666666666666666666666625f584e43372b1f1206000a16222f3a46515b6366666666666666666666666666666666666666666666666565646361605b545753514b47433c373128221c140b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e171d262d333b41464e53575e61676d71767b7f848a8f92999ea1a9aeb4bdc6cfd8e3ebdfd2c5b8ac9f9285796d6053463a2d2013070013202c3946535f6c7986929facb9c5d2dfecded1c5baafa59d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181f282f353d4348494b4b4b4b4b4b4b4b4b4b4b4b4b4b4846423b33291f1409000005111d29343f48505658595959595959595959595959595959595959595959595959595959595959595959595959595959595959595954524c443a3025190d01000000000000000000060f18212a323a414650545c6064696e7275787a7c7e7f80808181818180807f7e7d7c7b7978767573716e6d66686562605c544a3f34281c1003000000000006121f2b37434e585f6265656565656565656565656565656565656565656565656565656565656565656565656564615a5045392d2115080000000000030d151d232931363a3b3f4446484b4d4b51535556575859595a5a5a5958575653514b4946443f38342f271f19110a0100000000000000000000000a141e28313a4145474e5455565e61646769686d6f71717273737373737271706e6d666763605c55534d45413a322b221911070000000000000005111e2a36414c565e616565656565656565656565656565656565656565656565656565656565656565656565656565625f584e43372b1f120600000000000000000007101820282f353d44484f54555d606467666d6e7071727373737372716f6d6866625f58554f46423b332c241b130a010000000000000000000006121e2a353f4951575959595959595959595959595959595953514a42392e2329323f49515658595959595959595959595959595959595955534e463c31261b0f030006121e2a353f4951575959595959595959595959595959595959595959595959595857565553504a4a4745403937322b262017110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101820292f383f444d52585f62696e74797e82878c91969b9fa3abadb3babfc6cfd8e1eae1d7cbbfb5ab9c8f8376665c5044382c1f12060013202c3946535f6c7986929facb9c5d2dfece2d6cbc0b7afa9a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d161d242932383b3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b3a36312921180d030000010c18222d363f454a4b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4746413a32291e13080000000000000000000000060f18202830363e424a5053575f616569686d6f717373747475747474737271706f6e6d666968666462605c54585553504a42382e23170b000000000000030f1b26313c464e5355585858585858585858585858585858585858585858585858585858585858585858585858585650483e34281d1105000000000000030b12181f262a2d2e34383a3c3e4140454648494b4b4c4c4d4d4d4d4c4a494745403d3937332d29231d150d0800000000000000000000000000020c161f282f35393c4347494c5254575a565d6062646565666667666665646361605c545653514b47423c352f28201910070000000000000000020e1925303b444c5254585858585858585858585858585858585858585858585858585858585858585858585858585855534e463c32261b0f0300000000000000000000060d161e242933383d44484b515357545c606263646666666766666462605d5655534e48443e36312a211a120a010000000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4644403930271c202d373f464a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847433c342a20150a0000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b494846443f3d3a39352f2b26201a150b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061018222a323a414950565e616a6e757b80858b8f93999ea1a8acafb5b9bec5cbd1d8e1e9e2d9cfc7bbaea3998c7f7265544a3f34281c10030013202c3946535f6c7986929facb9c5d2dfece8ddd2c9c0bab5b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c121821272c2e2f32323232323232323232323232322e2d2a261f180f060000000006111b242d343a3d3e40404040404040404040404040404040404040404040404040404040404040404040404040404040404040403a3936302920170c02000000000000000000000000060e161e252a30383f44464d535558565e6163656666676868686767666665646361605c545b59575553504a4b4946443f3830261c1106000000000000000a15202a343c4347484b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b49453e362d22170c000000000000000001070c141a1e2123282b2d2f312e34383a3b3d3e3f3f40404040403f3e3c3a39352f2d2b27221b18120b03000000000000000000000000000000040d161e24292c32373b3c4146474a4e4c525456575858595a5a5a595858565453504a4a46454039373129241e160d070000000000000000000008141e29323b4146474b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4847433c342a20150a000000000000000000000000040c131921272c33383a4045474a4a505355565859595a5a5959585654524c4847433c38332a261f180f08000000000000000000000000000007121c252e353a3e3f4040404040404040404040404040403a38342e271e151b252d343a3e3f40404040404040404040404040404040403c3a37312a22180e0400000007121c252e353a3e3f4040404040404040404040404040404040404040403f3f3f3e3d3b3938332d2d2c29241d1b150f0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18222a343c444c535b60686e747b81878d92979c9fa4abadb2b9bbc0c7cacfd7dce2e6e0d7d0c7bdb3a99f92867a6e6154473b2e23170c000013202c3946535f6c7986929facb9c5d2dfeceee4dbd2cbc5c2c1c0c0c0c0c0c0c0c0c0c0c0c0c0bdb0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d161b1f2223252525252525252525252525252522211e1a140d0600000000000009121b22292e313233333333333333333333333333333333333333333333333333333333333333333333333333333333333333332e2d2a251e170e050000000000000000000000000000050c13191e262e34383b4246484b4c52545658595a5a5b5b5b5a5a5a595857565553514b4e4c4a4846443f3f3c3a38342e261e140a0000000000000000040e18222a31373a3c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3d39342d241b10060000000000000000000003090e1214171c1f20222523282c2d2e30313232333334333332312f2d2c2924201f1b17110c07010000000000000000000000000000000000040c13191d20262b2e3036393a3e41414547494a4b4c4c4d4d4d4d4c4b494846443f3d3a38342e2b261f19130c040000000000000000000000020d1720293036393b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b37322a22180e040000000000000000000000000001080d161c21272c2f35393a3e3f4446484a4b4c4d4d4d4d4c4b494745413c3a37312c28211a140e06000000000000000000000000000000000a131c232a2f32333333333333333333333333333333332d2c28231c150c131b23292e313233333333333333333333333333333333332f2e2b262018100600000000000a131c232a2f323333333333333333333333333333333333333333333333323231302e2d2b2822201f1d18120f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202a343c464e565e656c727b81878e92999fa2a9acafb5b9bdc4c7cbd1d6dae1e7e1dad6cec5bdb5aba1978d8074685e5246392d1c1106000013202c3946535f6c7986929facb9c5d2dfecf8ede4ddd6d1cecdcdcdcdcdcdcdcdcdcdcdcdcdcabdb0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13151618181818181818181818181818181514120e090300000000000000000911181d212425262626262626262626262626262626262626262626262626262626262626262626262626262626262626262621201d19130c050000000000000000000000000000000002080c151c23282c31363a3b3f414647494b4c4d4d4e4e4e4e4d4d4c4b4a494846454042403e3b3a38342e2f2d2b28231c140c0200000000000000000006101820262b2e2f32323232323232323232323232323232323232323232323232323232323232323232323231302d28221b1209000000000000000000000000000205060b1012131518181c1f2022232425262627272726252423201f1d1813120f0b0600000000000000000000000000000000000000000001080d11151b1f22252a2d2e313035393a3c3e3e3f40404040403f3e3d3b3a38342e2d2c28231d1a150d080100000000000000000000000000050e171e252a2d2e32323232323232323232323232323232323232323232323232323232323232323232323232322f2e2b262018100600000000000000000000000000000000050b10161c1d24292c2d2e34383a3b3d3e3f404040403f3e3c3a39352f2e2b26201c160e09030000000000000000000000000000000000010a12181e222526262626262626262626262626262626201f1c18120b030911181e222425262626262626262626262626262626262622211f1b150e06000000000000010a12181e222526262626262626262626262626262626262626262626262625242322201f1c171413100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323c464e585f686d777f868e93999fa3abadb3b9bbc0c7c9cfd3d7dce3e6e2dbd6cfcac2bcb4aba39992857a6d61564c41362a1e0a00000013202c3946535f6c7986929facb9c5d2dfecf8f0e9e2dcd8d5d4d3d3d3d3d3d3d3d3d3d3d3d3cabdb0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030709090c0c0c0c0c0c0c0c0c0c0c0c0c0c080705020000000000000000000000060c1115171819191919191919191919191919191919191919191919191919191919191919191919191919191919191919191413110d080200000000000000000000000000000000000000030a11171c1f262a2d2e3036393a3c3e4040414142414141403f3e3d3c3b3a38342e33312f2d2c282322201f1c17110a020000000000000000000000060e151b1f21222525252525252525252525252525252525252525252525252525252525252525252525252524211d17100900000000000000000000000000000000000003060709070c1013131516181819191a1a1a1a1917161413100c0705030000000000000000000000000000000000000000000000000001040a0f1315191d20212424292c2d2f31323233333433333231302e2d2b2823201f1c18120e090300000000000000000000000000000000050d14191e2021252525252525252525252525252525252525252525252525252525252525252525252525252522211f1b150e0600000000000000000000000000000000000000050b1013181d202023282b2d2f3031333333343333312f2d2c2924211f1b15100b05000000000000000000000000000000000000000000070d121618191919191919191919191919191919191312100c07000000060d1215181919191919191919191919191919191919191515120f0a04000000000000000000070d1216181919191919191919191919191919191919191919191919191818161513120f0b0606040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1925303b444e585f6a6f7a828b92989fa4abafb5babec5c7ccd2d5dae0e3e4e1dbd6d0cac5beb9b1aaa29992877d70685e52443b3025190e00000013202c3946535f6c7986929facb9c5d2dfecf8e7dfd7d0ccc8c7c7c7c7c7c7c7c7c7c7c7c7c7c7bdb0a3978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d070705010000000000000000000000000000000000000000000000060c10141a1e2122252a2d2e3032333334353535343433333231302e2d2c2823262422201f1c17161312100b060000000000000000000000000000040a0f121515181818181818181818181818181818181818181818181818181818181818181818181818181715110c0600000000000000000000000000000000000000000000000000040607080a0b0c0c0d0d0d0d0d0c0b0907060400000000000000000000000000000000000000000000000000000000000000000306080d11131417191d202123242525262727272625252321201f1c171313100c07000000000000000000000000000000000000000002080e11141418181818181818181818181818181818181818181818181818181818181818181818181818181515120f0a040000000000000000000000000000000000000000000001070d111314171c1f20222325262627272626252321201d1915120f0a0400000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0706040000000000000106090b0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0908060300000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0c0c0b0a080606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2a36414c565f6a6f7c848f949fa2aaafb5bbc0c7cad0d4d7dde3e5e3e0d9d4cfcac5bfbab3ada79f9892877e716b60564c4132291e140800000013202c3946535f6c7986929facb9c5d2dfece9dfd5cdc5c0bcbababababababababababababababab0a3978a7d7064574a3d3124170a0000000000000000000003090d1012131313131313131313131313131313131306040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191e202123252627272828282727272625242322201f1c181917151312100c06070603000000000000000000000000000000000000030608090c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707080d11131416171819191a1a1a1a191816151312100b060604000000000000000000000000000000000000000000000000020507080c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c090806030000000000000000000000000000000000000000000000000000010406060b101213151718191a1a1a1a1918161413110d0806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f3846525e686f7c8591969fa6aeb4bbc0c7cbd1d6dbe0e3e4e2dcd7d3cec8c5beb9b4aea9a19e9590867e716c61594f443a3020170d0200000013202c3946535f6c7986929facb9c5d2dfece2d7cdc3bbb4afaeadadadadadadadadadadadadadadada3978a7d7064574a3d3124170a000000000000000000070e14191d1f202020202020202020202020202020202013110d070100000000000000000000000000000000000000000000000000000000030606090c0e0f111112121111100e0d0a070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080d1113141618191a1a1b1b1b1b1a1a19181716151313100c070b0807060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060708080808080707040100000000000000000000000000000000000000000000000000000000000000000000000000000000000001040707090b0b0c0d0d0d0d0d0c0b0a08070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607080a0b0c0d0d0d0d0c0b0907070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3841505a616e7a849197a1a8b0babfc5ccd2d7dce3e6e2dfd8d4d1cbc7c3bcb8b3adaaa29f97928b837c706c615a50473d32291e0e050000000013202c3946535f6c7986929facb9c5d2dfecdcd0c5bbb1a9a3a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0978a7d7064574a3d3124170a00000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d18130c0400000000000000000000000000000000000000000000000004060b0f121316181a1c1d1e1e1f1e1e1d1b19171413110d08060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707090b0d0d0e0e0f0e0e0e0d0c0b0a090807060400000000000000000000000000000000000000000000000000000000000000000000000000000000040607080808070606030000000000000000000000000104060708080808070604010000000000000000000000000000000000000000000000020507080a0c060b0f12131414151515151413110d080a070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407070808080807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953616c75828f96a1a9b2bac2cad0d7dde3e4e1dad5d2cdc8c6bfbab9b1aca9a29e98928d857f786e6a615a50483e352c20170d000000000013202c3946535f6c7986929facb9c5d2dfecd8ccc0b4a99f979494949494949494949494949494949494948a7d7064574a3d3124170a0000000000000007111a232a31353839393939393939393939393939393939392c29241d160d04000000000000000000000000000000000000000000070c1013171c1f20222527292a2b2b2b2b2a2928262421201d1914120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607070c1012131415151413120f0b0607050200000406070a070d111314141515151413110d07010000000000000000000000000000000003050608090e12141517191a171b1f2021212222222121201d191a171413100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607080d111314151515151413100c07080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b65717e8a949ea8b2bbc4ccd6dbe2e5dfd8d4cfc9c6c2bcb8b4aeaca7a09d97928c86807a726c665f5750483e362d231a0e05000000000013202c3946535f6c7986929facb9c5d2dfecd5c8bcafa3978d878787878787878787878787878787878787877d7064574a3d3124170a000000000000030e19232c353c4145464646464646464646464646464646464639352f281f160c01000000000000000000000000000000000001070c12181c1f22282b2d2f323435373738383837363533312e2d2a25211e1a150f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000406070808080807060401000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e13131313131313131313131313131313070704010000000000000000000000000000000000000000060b10121317181c1f2021222121201f1c171514120e090c101314171a181d20212122222221201d18130c0400000000000000000000000000060b0f121315181a1e212123252722272b2d2d2e2e2f2f2e2d2c29242724201f1d18120f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d11131417191d202121222221201f1d18171414110e080201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7884919da6b0bac4cdd6dee7e0d9d4cdc8c5beb9b8b1abaaa39f9b95908b85807a736d68605b544e453e362d241b110800000000000013202c3946535f6c7986929facb9c5d2dfe1d4c7baaea194877b7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786d6053463a2d20130700000000000009141f2a353e474d51535353535353535353535353535353535345403a31281d130700000000000000000000000000000000030b12181d23282c2d3338393c3f41424444454544444341403d3a3936302e2b261f1b160d08020000000000000000000000000000000000000000000000000000000000000000030608070c101313141515151413110d08070603000006060606060606060606060606030200000000000000000000000001080f14181a1b202020202020202020202020202020201413110d080100000000000000000000000000000000070c11171c1f202323282c2d2e2f2e2d2d2b282221211e1a14181d1f20242724292c2d2e2e2f2f2d2c29241d160d0400000000000000000000020a11171b1f202225252a2d2e3032342d3337393a3b3b3b3b3b3a39353033302d2c29241d1b160f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d13181d20202424292c2d2e2f2f2e2d2c29242421201e1914120d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d8995a0acb8c1ccd6dfe7ded5cec8c2bcb8b3adaba79f9d98928e89837e79736d68605d56504a423c332c241b12090000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665c5145382c1f130c0500000000000d1925313c4750585e5f6060606060606060606060606060605f514b433a2f24180d010000000000000000000000000000060d151d24292e34383a3f4446494b4d4f505151525151504e4c4a4746413b3a37312c272119130c050000000000000000000000000000000000000000000000000000000000030a0f131516181c1f202122222121201d19171312100c1313131313131313131313131313100f0d09050000000000000000020b131a202427272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d19130c0400000000000000000000000000030b12181c23282b2d302e34383a3b3b3b3a3938332d2e2d2a252024292c2d31342f35393a3b3b3b3b3a39352f281f160c010000000000000000090b141b22272b2d2f3131363a3b3d3f41423f444647474848484847454142403d3a38352f2c27211a150e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d24292c2d312f35393a3b3b3b3b3a39352f312e2d2a251e1e1811090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c556774818e9aa7b1bccad3dee8dfd5ccc3bdb8b1aba9a19e9a95908b86817d77716d67615d56524c443f382f2a211a1109000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6161616161616161616161616161616161605c544b403428211c17100800000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4035291d1104000000000000000000000000030a11171f272f35394045464a505355585a5c5d5e5e5e5e5d5c5b595754524c4847423c38322a251e160e070000000000000000000000000000000000000000000000000000060b10151b1f212223282c2d2e2e2f2e2d2c292423201f1c1720202020202020202020202020201c1c1915100a020000000000010b141d252b30333439393939393939393939393939393939392c29241e160d040000000000000000000000060c151d23282e34383a3d404044464748484746443f3f3b3a36312c2f35393a3d4143414547474848484745413a31281d13070000000000000009121b1d262d3337393b3e414246484a4c4d4f49505354545555555454524c4f4d4a4745403938322b262018100900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d161d24292f35393a3e4141454748484848474540403e3b3936302e29231b13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677784919eaab7c3cedde5e0d6ccc3bab2aca79f9d97928d88837f7a75706b65605d55524c45413a332d261d180f0e08010000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605454545454545454545454545454545453514b42392e302d28221a1208000000121f2b3845515e6a747979797979797979797979797979797976675d5145392c2013060000000000000000000000040c151c2328313940454b5153545b60626567686a6a6b6b6b6a69686664615e5655534d48433d363028201911090000000000000000000000000000000000000000000000020a11171c1f262b2e2f2e34383a3b3b3b3b3a39352f302d2c28232d2d2d2d2d2d2d2d2d2d2d2d2d2d292825211b140c040000000008131d262f363c4041464646464646464646464646464646464639352f2820160c01000000000000000000070f171e272e34383f44464a4d4a51535455545453504a4c4846423b39394045474a4d504b51545455555554514b433a2f24180d01000000000006101b242d2f383f4446484b4d4d535456585a5c535b60606161626261605d565c5a5753514b48433d37312a221b120a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000710191f282f353a4045474a4e4c52545455555453514b4d4a4746413b3a342d251b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8796a0acb9c5d2dee5dacfc4bab2a8a09e95908a85807b76726d6863605953514b46413a352f28222726241f1a130b0200000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534747474747474747474747474747474645403f3f3e3c39332c241a1005000013202c3946535f6c7986868686868686868686868686868686796d6053473a2d20140700000000000000000000040d161e262e343d434b51545c6064666c6f727475777778787777767473706d6866625f57544e46413a322b231b1209000000000000000000000000000000000000000000060c141c23282b32373b3c4040454647484848474541413d3a38342e39393939393939393939393939393635322c261e160c020000030f1a252f3841484c4e535353535353535353535353535353535345413a32281e130800000000000000000710192129303940454a5053565a545c6061626160605b545854534d4745474b5153575a5d555d6061616262605d554b4135291d110400000000000c17222d363e4149505355585a575e61636567696a656c6d6e6e6e6e6e6d686b696663605d55544f47433c342d241c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019222a313a40454b5153575b565d6061626261605d555a5754524c4a463f372d23180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a8b2bdc8d4e1e1d5c9bdb2a8a0969189837e79736e6a65615d56544f4745403935302f3032333433302b241d140b00000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e362c22170c000013202c3946535f6c7986929393939393939393939393939386796d6053473a2d201407000000000000000000030c161f2830383f444f555d60666d7075797c7e808283848485848483817f7d7a77736e69626058524c443d352d241b1208000000000000000000000000000000000000000810181e262e34383c4347494c4b51535455555454524c4d4a46443f44464646464646464646464646464643413d3830281e140a00000814202b36414a53585a606060606060606060606060606060605f524c443a2f24190d01000000000000050e19222b333b434b51545c60636669666d6e6e6e6d6c666865615e57545253555d606467696b676d6e6e6e6e6d675d5145392c2013060000000005111d29343e4850535b6062646769696e707274757778797a7a7b7b7b7b7a79777573706d67636059534e463f362e251c120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18222a343c434b51555d6064676a686d6e6e6e6e6d67696764615e565651493f34291e1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afbcced9e5dfd2c5b9ada19691847d76716d66625f5854524c48443d393535393a3c3d3e40413f3c362f261d0d03000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60595959595959595959595959595959595959595959575550483e33281c11040013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d6053473a2d2014070000000000000000000b151e28313a424a505961676d72797d8285888b8d8f9091919191908f8e8c8a8784807b756f6a615e564f473e362d241a1107000000000000000000000000000000000008111a222a30383f44464e535559545c6061616261605d565a5653504a5153535353535353535353535353534f4e49423a30261b1005000b1824303c48535c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d564c4135291d11040000000000020d17202b343d454d555c60666d70737678797a7b7b7a797775726e6966605d5f62676d70747678797a7a7b7b7b796d6054473a2d211407000000000815212d3945505a62656c6e717476787b7d7f808283858687878888888787868482807d79756f6b625f58514840372e241b0f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a343c464e555d60676d717477787a7b7b7b7b7a787673716e6865625b51463a2e221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0bdc9d6e3ded1c4b8ab9e91847a706b64605c54534e4746414041414344414647484a4b4d4e4c4741382f1f150b010000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6666666666666666666666666666666666666666666664615a5045392d2114080013202c3946535f6c7986929facacacacacacacacacaca093867a6d6053473a2d201407000000000000000007121d27303a434b545c606b70797f848a8e9298989a9b9d9d9e9e9e9d9c9b999795918c88827c756d68605950483e362c23190d0400000000000000000000000000000008111a232c343c424a5053585f626669666d6e6e6e6e6d686a6763605c545e60606060606060606060606060605c5a544c42382c211509000d1a2733404c58646e747979797979797979797979797979797976685d5245392c201307000000000008141e29323d464f575f676d72787d80838586878887878684817f7b77726d686a6e74797d8083858687878888887d7064574a3d3124170a000000000a1724303d4956626c71787b7e80838587898b8d8f9091929994949595949992918f8d8a85817c766f6a625b514940362d21170d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313c464e585f676d737a7d8183858787888887868583807d7a77726d62564a3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afbcd1dce7dacdc0b4a79a8d817468605953514b4a4a4b4b4c4c4d4e4f504c5254555658595a58524a4131271d12070000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7272727272727272727272727272727272727272727272716c6155493c3023170a0013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d6053473a2d20140700000000000000050f18232e39424b555d666d747d848c91979b9fa2aaa7a8aaaaababaaaaa9a7a6a7a09d99948f89817a706b615a50483e352b1f160c0100000000000000000000000000060f1a232c353e464e545c60646a6f737678797a7b7b7b7a787674706d66626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c69665e54493d3225190d000e1b2734414e5a677480868686868686868686868686868686867a6d6054473a2d21140700000000010d1925303b444f5960696e797e84898d9092989495949992908e8b87837f7a74757b81858a8d909192999494958a7e7164574b3e3124180b000000000b1825313e4b5864717e85888b8d90929796989a9c9d9e9fa3aba1a1a1aba39f9e9c9998928e89827c726d635b51483e33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434e585f6a6f7980858a8e909298949595949792908d8a87847f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995abb5bfcbd7e3dbcec1b5a89b8e82756961595957575757575859595a5b5c5d565d616263656667645c5243392f24180c0000000013202c3946535f6c7986929facb9c5d2dfe5d9ccbfb2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574a3e3124170b0013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d6053473a2d201407000000000000030d17212834404b545d676d78808991969ea1a9abaeb3b3b5b6b7b7b8b7b7b6b4b2b1acaaa69e9c938e857d716c615a50473d31281e1308000000000000000000000000030e18212c353e474f585f666d71777c7f82848687888887878583807d79746f7779797979797979797979797979797670665a4e4135281c0f000e1b2734414e5a6774818d9393939393939393939393939393877a6d6054473a2d2114070000000005111e2a36414c56606b6f7b838b9196999c9fa2aaa1aba39f9d9b9895908c868181878e92989a9c9e9fa3aba1988b7e7165584b3e3225180b000000000c1926323f4c5965727f8c97979a9c9fa2a9a5a7a8aaabacafb5aeaeaeb5aeacaaa8aaa29f9b948f867f736d635a50453b31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555f6a6f7c848d92979a9d9fa2aaa1a1a9a19e9c9a97968e8175685b4e4235281b0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8799a3aebbc7d3e0dfd2c5b8ac9f92867b706b676564646464646565666768696a6b686d6f707173746e64554b4035291d100400000013202c3946535f6c7986929facb9c5d2dfecdacdc0b4a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d6053473a2d20140700000000000009141f29333b45515c666d79828d929ea1a8adb2b8babec0c2c3c4c4c4c4c3c2c1bfbcb8b7b0aaa59e9792877e716c61594f433a2f24190d04000000000000000000000009151f2a333e474f59616a6f787e83888c8f91939a9495949792908d8985807b8486868686868686868686868686868276695c4f4336291c10000e1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f93877a6d6054473a2d211407000000020d17202d3946525e686f7d8590959ea0a8a9abaeb4aeb5afacaaa8a7a09d98928d8e93999fa2aaa9abacaeb5a5988b7f7265584c3f3225190c000000000c1925323f4c5865727f8b98a9a7a9abadb3b2b3b5b6b8b9bbc0bbbbbbbfbbb9b7b5b4aeaca69f98928b7f736c62574d42362a1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945515d676f7c8591969fa2a9aaabaeb4aeaeb3adaba9a6a89a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7986929facb9c5d2dfe0d3c7baaea39891847d77747271707070717172737474767778797a7b7d7e808074675d5145392c1f130600000013202c3946535f6c7986929facb9c5d2dfecdcd0c4b8ada49c99999999999999999999999999999999999999999999998f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053473a2d2014070000000000020e1a25313b45505a606d78828f949da4adb2b9bec4c6cad0ced0d0d1d1d1d0cfcecec8c5c1bbb7afa9a19992887e716b60564c41352920150a00000000000000000000020e1a26313c454f59616c707c838b9095999c9e9fa4aca1a9a29f9d9a97928d8888939393939393939393939393938f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7acacacacacacacacacaca093877a6d6054473a2d21140700000008141e2c38444f59616e7a859197a0a7acb2b6b8babebbc0bbb9b7b4b1acaaa29f9a9b9fa4abaeb4b6b8b9bbb2a5998c7f7266594c3f3326190c000000000b1825323e4b5865717e8b98a4b1b6b8babebec0c2c3c4c5c7cbd1c8d1cbc7c5c4c2bfbab8b0aaa39f918b7e71695e53463b3025190e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b55606d79849197a0a8adb3b6b8babebbbbbeb9b8b6b3a69a8d8073675a4d4034271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b667783909daab6c3cfdbe3d6cbbfb4aaa196918984817f7e7d7d7d7e7e7f7f8081828384868788898b8c867a6d6053473a2d20140700000013202c3946535f6c7986929facb9c5d2dfece1d5cabfb6ada8a6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000000000005121e2a36424d57626c75818e949fa6aeb9bdc4c9cfd3d6dbdbdbd6d4d3d5d8dcdad9d4d1ccc7c1bbb3aba39a92877d6f685d52453c32261b0f0300000000000000000006121e2b37424d57616b707e8690959da0a7a9abacafb6aeb3adaba9a9a19e9a9a939aa49f9f9f9f9f9f9f9f9f9f9c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4b9b9b9b9b9b9b9b9ada093877a6d6054473a2d2114070000020e1925303b4854606b76828f97a1a9b1b9bdc3c5c6cad0cbc7c5c3c1bcb8b4aeaca7a8acafb5babfc3c4c5bfb3a6998c807366594d4033261a0d000000000b1825313e4b5864717e8b97a4b1bec5c6cad0cdcfd0d1d2d3d7dcd4dcd7d3d2d1d0cac6c2bcb4aea39f92867b6e61564d42362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6773808d96a0a9b2babec3c5c6cad0cfc9c6c5bfb3a6998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a546774818d9aa9b3becad6e2dcd0c6bcb2a8a19e96918e8c8a8a8a8a8a8b8c8c8d8e8f9091929995969894887b6e6155483b2e22150800000013202c3946535f6c7986929facb9c5d2dfece6dbd1c8bfb8b4b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000714212d3a46535e69717e8b939ea6b0b8c0c9cfd5dadcd7d3d2cec9c7c7c8ccd1d2d5daded7d3cdc5bdb5aca39991847a6d60584e43372b2015090000000000000000040f19222d3a47535f69707d879298a0a7acb1b5b8b9bbc0bbbebab8b6b3adabaca49fa4acb6acacacacacacacaca99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0c6c6c6c6c6c6baada093877a6d6054473a2d211407000005111e2a36414c5663707d89949fa9b3bbc3c9ced2d3d6d4d2d1cccacec8c6bfbab8b4b4b9bbc0c7cad0d1cdc0b3a69a8d8073675a4d4034271a0d000000000b1724313e4a5764717d8a97a4b0bdcad3d6d8d4d2d2d1d0d0d0d0d0d1d2d3d7dcdbd6d3cec6bfbaaea2988e8174695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a85929fa8b2bbc4cad0d2d3d6dbdad5d2ccbfb2a5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3d4a5763707d8a97a2adbac5d0dbe2d8cec4bab2aca8a09e9a9897979797979898999a9b9c9d9e9fa3aba3a296897c6f6356493c3023160900000013202c3946535f6c7986929facb9c5d2dfecede3dad1cac4c0bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000006121f2b37434e58616e7b86929fa5afb8c2cad5dae1d9d1cbc7c5c1bcbbbabcbfc4c5c9cfd6dfdfd6cfc6beb4aba1968e81746a5f53473c31261a0e00000000000000000a16212d3944505a616e7b859299a3aab1b8bcc2c4c6c8ccd0cac6c5c3beb9b8b6afacafb6beb9b9b9b9b9b9b9b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cdd2d2d2d2c6baada093877a6d6054473a2d21140700000714202d3946525e6875828f9ba6b0bbc4cdd5d9ded5cec8c5c4bfbdbebfc1c3c4c5c0c1c6c7ccd2d6dbdacdc0b4a79a8d8174675a4e4134271b0e000000000a1724313d4a5764707d8a97a3b0bdcacad2ccc8c6c5c4c3c3c3c3c3c4c5c7cbd1d9e1dfd8d0cabfb4aa9f92867b6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a2adbac4cdd6dbdedfe1dbd6d3d2cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d3a4653606d7985929faab4becad6dde0d6ccc4bdb9b2acaaa7a5a4a3a3a3a4a4a5a6a7a7a9aaabacaeb4b0a4978a7e7164574b3e3124180b00000013202c3946535f6c7986929facb9c5d2dfe5e5e5e3dbd5d0cdccccccccccccccccccccccccccccccccccccccc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000000000815212e3a47535f6a74818e98a2aeb7c1cad4dcdfd7cfc7c0bbb9b4b0aeadafb2b8b9bdc4ccd3dce1d8d0c6bdb2a89f93877c6f62574e42372b1c1106000000000000030f1b27323c4955616c76828f98a2abb4bcc3c8ced1d2d4d8dbd6d3d2cfc9c6c5c0bbb9bbc0c7d0c6c6c6c6c6c2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddadfdfd3c6baada093877a6d6054473a2d21140700000814212e3b4754616e7a86939facb9c2cdd6dfdfd5ccc3bdb9b7b2b1b1b2b4b6b8b9bec4cdd4d7dde3e7dacec1b4a79b8e8174685b4e4135281b0e000000000a1723303d4a5663707d8996a3b0bcbfbebcc0bbb9b8b7b7b6b6b6b7b7b9bbc0c7cfd1d9e2dbd0c5bbafa3998b7f7265584c3f2f24190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c566875828e9ba9b3beccd5dfe6e4dfd7cfcac6c5c4beb1a4978b7e7164584b3e3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6673808d98a2aebac1cbd4ddded6cec9c4bdb9b7b4b2b1b0b0b0b1b1b2b2b3b4b5b6b7b9babfb2a5988c7f7265594c3f3226190c00000013202c3946535f6c7986929facb9c5d2d9d9d9d9d9d9d9d9d9d9d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8cfc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000004111d2935414c56626f7c87939faab4bec9d3dce2d7cdc5bdb5afaca8a3a1a0a2a5abadb2bac2cad3dde2d8cfc4bbafa49a8f82756a5f5347382e23170c00000000000007131f2c38434e5864717d8a949faab3bdc6ced4d9dedfe0dbd6d3d2d0cfcecdd2ccc8c6c8ccd2d9d2d2d2d2cfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d6054473a2d21140700000b1724313e4a5764717d8a99a4afbbc7d4dfe1d6cdc3bab2acaaa5a4a4a6a7a9abadb2bbc4cfdae6eee3d7cbbfb5ab9b8e8275685b4f4235281c0f000000000a1623303d495663707c8996a3afb3b2b1afb6afacababaaaaa9a9aaabacafb5bdbfc7d1dbe2d7cbc0b5ab9c8f827569564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687885919eabb8c4d0dee7e4dad2cdc5bebab8b7b7b0a4978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b54616d7a85929fa6b0b9c2cbd4d9dfdad5cec9c5c4c1bfbdbdbdbdbdbebfbfc0c1c2c3c4c5c7c0b3a69a8d8073675a4d4034271a0d01000013202c3946535f6c7986929facb9c5ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc2b5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000713202c3945525d6874818e99a4afbcc5d0dbe4d9d0c5bbb3aba39f9b96949495999ea1a8b0b8c2cbd5dfe1d8ccc0b6ac9e94887b6e62544a3f34281c100300000000000915222e3b4854606a7783909da6b0bcc5cfd8e0e4e0d9d4d0cac6c5c4c2c1c1c1c3c4c5c7cbd1d9e1ebdfdccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d6054473a2d21140700010d1a2734404d5a6773808d9aabb5c0ccd7e6dacfc4bbb2a8a09e999798999b9c9ea1a9b2bec9d5e1ede0d3c7bbaea3998f8275695c4f4236291c0f00000000091623303c4956636f7c8996a2a8a7a5a4a3aca49f9f9e9d9d9d9d9d9e9fa3abadb5bfcad5e0dcd1c5b8ab9e928578685d5245392c201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8797a1adb9c6d2dfe7dcd2c8c0bbb3adabaaaaaaa3968a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3946525e68727f8b949ea7b1b9c0c8ced4d8dfd9d5d2d1cdcbcacacacacacbcbcccdcecfd0d1d2cec1b4a89b8e8175685b4e4235281b0800000013202c3946535f6c7986929facb9bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb5a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000714212d3a4754606d7a86929fabb5c0ced7e2ddd2c7beb3a9a299928e898887898c91969fa6b0b9c3cdd9e4ddd2c7beb0a69a8d8073665c5044382c1f120600000000000916232f3c4956626f7c8995a0acb8c2ced7e1e7ded5cec8c5bfbab8b7b6b4b4b5b6b7b9bbc0c7cfd9e3e8dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddae0e0d3c6baada093877a6d6054473a2d2114070003101d293643505c6976838f9ca9b6c2d2dde1d5c9beb3a9a096918c8a8b8c8e909197a1adb9c6d2dfecdfd2c5b9ac9f92877f7265584c3f3225190c000000000916222f3c4955626f7c88959d9b9a999796959a93929190909090909192999ca3adb8c4d0dcdfd2c6b9ada197877a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a9b3bec9d5e1e1d6cbc0b6aea9a29f9e9e9d9d96897c706356493d3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2a36414c56606c78828f959fa7aeb8bdc3c8cdd2d3d7dcd9dad8d7d6d6d6d7dcd7d3d2d0ced0cbc7c5c2b6a99c8f8376695c50432f24190d01000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a89c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000004111d2935404b5565727e8b98a2aebdc7d2e0e4d8ccc0b6aca2979287817d7b7a7c7f848f949fa7b1bcc8d4dfe4d9d0c1b8ab9e9285796d6053463a2d2013070000000006121f2b37434e586774818d9aa7b1bccad4e0e8ded5ccc3bdb9b4aeacaaa9a8a7a8a9aaacafb5bdc7d1dce8dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cdd4d4d4d3c6baada093877a6d6054473a2d2114070004111e2b3744515e6a7784919daab7c4d0dddfd2c6b9ada19791847f7e7e7f818385919eabb8c4d1dee7dacdc0b4a79a8d81746d62564a3e3125180b000000000915222f3c4855626f7b8892908f8d8c8b898887868584848383838484868c919ca8b4c0cdd9e2d5c9beb3a995887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcfdae6ddd1c5b9aea49d97929191919090897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925303a44505b666d7a8390959da4acb1b8bcc3c5c7cbd1cdcdcececdcdccccd1cbc7c5c4c1bfbfbab8b6b4aa9e9184776b554c4135291d1104000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69c8f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000613202c3945515d6776828f9caab4bfd0d9e3e0d4c8bbafa49a92857c75706e6d6f7279828f95a0acb8c2cdd8e4dfd2c6b9ada197897c706356493d2f24180d010000000815212e3a47535f6a7884919eabb8c3cddee6e0d6ccc3bab2acaaa29f9d9c9b9a9b9d9d9fa3abb5c0cbd7e3dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0c7c7c7c7c7c6baada093877a6d6054473a2d2114070005121f2b3845525e6b7885919eabb8c4d1deded1c4b8ab9e91857a7271717374767e8a97a4b1bdcad7e4d8cbbeb1a5988b7e72655b51463a2e221609000000000815222e3b4855616e7b86858382807f7e7c7b7a797878777776767778787f8c99a5b2bfccd8e6dacfbcafa295897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c98a5b2bfcbd8e5dbcec1b5a99d928d858484848483837b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28333f4a545d686d7a838d929da0a8abb1b6b9bbbfbfc0c1c1c1c1c0c0bfbdc0bbb9b7b5b3b4aeacaaa7a59f928579675d5145392c201306000013202c3946535f6c798692999999999999999999999999999999999999999999999999999999999999999999999999998f8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000714202d3a4753606d7a86929facb9c5d0dfebdfd2c6b9ac9f93887d6f6a63616162676d7883909da7b1bcc8d4e0e2d6cabeb3a99a8d807367554b4035291d10040000000915222f3c4855626f7b8896a1adb9c5d2dfe5dacec4bab2a8a09e9892918f8e8e8e90919299a3afbbc7d4e0dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4babababababababaada093877a6d6054473a2d2114070005121f2b3744505b657986929facb9c5d2dfdacec1b4a79b8e81746864656668717e8a97a4b1bdcad7e3d6cabdb0a3978a7d7064574a3f34291e1206000000000713202d3a4653606d787a787775747271706f6d6d6d6f727476787a7d8085929eabb8c5d1dee2d5c8bcafa295897c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a6b3c0ccd9e6dacdc0b3a79a8d80787777777777766e695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b17222d38424c565d686d79808991959d9fa7a9acaeb5b2b3b4b4b4b4b3b3b2b1b5afacaaa8a6aaa39f9d9b989696877a6d6054473a2d211407000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8275695c4f4236291c0f0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000a1724303d4a5763707d8a99a3aebac7d3e0e1d4c8bdb2a89b8e81746b60585554555d66707d89959fabb8c4d1dde6dacfc3b7aa9d908377675d5145392c2013060000000b1825323e4b5865717e8b98a9b2bdc9d5e1e1d5c9bdb2a8a096918a858483818182838387929facb9c5d2dfdccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7adadadadadadadadadada093877a6d6054473a2d211407000613202d394653606c798698a3aebac7d3e0dacdc1b4a79a8e8174675b585964717e8a97a4b1bdcad7e2d5c9bcafa296897c6f6356493c3023160d010000000006121f2b3844505c666d6d676a686766676d7074777a7c7e818385878a8d9297a1adb9c6d2dfe3d6cbbfb4aa95887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1a2734414d5a6774808d9aa7b3c0cddae1d4c7bbaea194887b6e656b6a6a6a6a615f574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3a434c565d676d747d848a9095999c9fa3aba5a6a7a7a8a7a7a6a5a4aba39f9d9b99979892908e8b8987847b6e6154483b2e21150800000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574a3e3124170b0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000d1a2633404d596673808c99abb4bfcbd7e3ded2c5b8aca096887c6f62594f48474b54606b7683909da9b6c3d1dce7dfd2c5b9ac9f92867a6d6053473a2d2014070000010e1b2834414e5b6774818e9aa7b4c1cfdae6ded2c5b9aca19691847d797776757475767885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa1a1a1a1a1a1a1a1a1a1a1a093877a6d6054473a2d2114070005121f2b3744505b657986929facb9c5d2dfddd0c3b6aa9d9083776d64626164717e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f231609000000000003101c28343f4a545c60605d5e616a6f74797d818386898b8d909297969a9ea1a9b3becad6e2e0d3c7baaea398877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aa7b4c0cddae0d3c6baada093877a6d60535e5d5d5d55534d453b31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28313a444c555c606b70787e83888c90929997989a9a9b9b9a9a999997969992918e8c8a888683817f7c7a786e695e52463a2d20140700000c1825323e4b57636d72737373737373737373737373737373737373737373737373737373737373737373737373737373716c6155493d3023170a0013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070004111d2935414c566976828f9ca9b5c2d1dce7ddd1c4b7aa9e9184776a5f53473d3a424f5966727f8c99abb5bfcbd7e3e0d4c7bbafa399897c6f6356493c30231609000004101c2934404b55697683909ca9b6c3cfdce3d7cbc0b5ab9e91847a706d66696867686c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9494949494949494949494949493877a6d6054473a2d21140700030f1b27333f495e6b7885919eabb8c4d1deddd1c4b8aba0958b7f75716f6e6d717e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f2316090000000000000b17232e38424a50535960696e757c81858a8d909299989a9c9ea2a9a6abadb3bbc5cfdae6dfd2c5b8ac9f9285796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053515150504846423b33291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b161f28323a434b515960666d71777b808386888a8c8d8e8e8e8e8d8d8c8a8988868482807d7b79777472706d68615e574d42362a1e120500000a16222f3a46515b636666666666666666666666666666666666666666666666666666666666666666666666666666666664615a5045392d2114080013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000713202c3945525d687885929eabb8c5d1dee7dacdc1b4a79a8e817467584e4335303d4956626f7c8999a3aebbc7d3e0e3d7cbc0b5ab988b7f7265584c3f3225190c000006131f2c3845515c677885919eabb8c4d1dee0d3c7bbafa3998b7e7168605c545b5b5f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a677480878787878787878787878787878787877a6d6054473a2d21140700000b17222d44505d6a7783909daab6c3d1dce0d4c8bcb1a79b918b827e7c7b7a787e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f23160900000000000006111c26303b454f59616b707b81878e92979a9d9fa3aba7a9abadb3b3b8b9bec5cdd7e1e7dcd0c3b6a99d908376665c5044382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053474444433b3a36312921180d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d162028303940454f545c60646a6f7376797c7e7f808181818180807f7e7c7b79777573716e6d66686563615e56524d453b30251a0e02000006121e2a353f49515759595959595959595959595959595959595959595959595959595959595959595959595959595959575550483e33281d11050013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000714212d3a4754606d7a8797a2adb9c6d2dfe4d7cbbeb1a4988b7e7165584b3e312d3a4653606d7986929facb9c5d2dfe8dcd1c0b3a79a8d8074675a4d4134271a0600000714202d3a4753606d798697a1adb9c6d2dfdfd2c5b9ac9f92867a6d6056514a4e525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000714212d3a4754606d7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786c605346392d2013060000061b2835414e5b6874818e9babb5bfcbd7e2d9cdc3b9aca39b938f8b8988878686929facb8c5d2dfe2d5c8bcafa295897c6f6256493c2f23160900000000000005121e2a36424d57616b707d858e93999fa2a9aaacafb5b4b6b8b9bec0c5c6cacfd7dfe3dcd4c8bdb2a89a8d817467544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a37372e2d2a261f180f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e272e343d424a5053585f6266676d6f7172737474757474737271706e6d6668666462605c54585654524c46423b33291f1409000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a49453e362c22170c000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000916232f3c4956626f7c8995a9b3becad6e2e3d7cbc0b5ab96897c6f6356493c302c3845515c667784919daab7c4d0dde8dbcfc2b5a89c8f8275695c4f422e23170c00000815212e3b4854616e7b8794a9b3bec9d5e1ddd0c3b6aa9d908377675d51444045525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000613202c3945515d676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c655b5044372b1f120500000b1825313e4b5864717e8b99a3aebbc6d0d8dfd5cbbeb5aca59e9b97959499929298a2aebac6d3dfe2d5c8bcafa295897c6f6256493c2f2316090000000000000714212d3a46535e69707d8792979fa4abadb3b6b9bbc0c0c3c5c6cacfd1d2d6dae0dcd7d1cbc1b8aca096897c706356493d2e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a2d2a22211e1a140d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c151d232830383f44464e5355555c606264656767686867676666646361605c5459575553504a4c494746413a36302921170d030000000007121c252e353a3e3f4040404040404040404040404040404040404040404040404040404040404040404040404040403e3d39332c241a1005000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000b1824313e4b5764717e8a97a4b1bdcfdbe6e0d4c7bbafa399877a6e6154473b2e2834404b546975828f9ca8b5c2cfdbe8ddd0c4b7aa9d9184776a544a3f34281c1003000916222f3c4955626f7c8895a2afbbcfdae6dbcec1b5a89b8e827568554b403445525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100004111d2935414c555d6061616161616161616161616161616161605b53493f33271b0f0300000714212e3a4754616d7a86929faab4bfc6cfd2d6d0c7beb7afaaa8a4a2aba39f9fa2aab4bfcad6e2e2d5c8bcafa295897c6f6256493c2f231609000000000005121e2a36424d57616e7b859299a1a9afb5babec3c5c7cbd1cfd1d2d6dbdedddcd7d3d1cbc6bfbbafa59d9184776b6054483b2f1c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a2d201514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181e262e34383c4347484b51535557595a5b5b5b5b5a5a5957565553514a4d4a4846443f3f3d3a3935302a251f170f050000000000000a131c232a2f323333333333333333333333333333333333333333333333333333333333333333333333333333333331302d28221a120800000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000c1925323f4c5865727f8b98a5b2becbd8e5dfd2c5b9ac9f9286796d6053463a2d232e414e5b6774818e9aa7b4c1cddae7ded2c5b8ab9f928578665c5044382c1f120600091623303c4956636f7c8996a2afbcc9d5e2d9cdc0b3a69a8d8073675a4d402f45525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100007131f2b36414a52585a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f54524c433a2f24190d0100000713202d3946525e6875818e98a2aeb4bcc2c6cacfd0c9c1bbb6b5b1afb5afacacaeb4bcc6d0dbe7e2d5c8bcafa295897c6f6256493c2f23160900000000000714202d3a46525e6975828e97a2abb3bbc0c7cad0d2d3d7dcdcdbdcd7d3d2d0d1cbc7c5c0bbb5aea59e938a7e7164594f44382c200a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a2d2014070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c141c23282b31373a3c404546484b4c4d4e4e4e4e4d4d4c4b4948464440403e3b3a38342e302e2d29251e1a140d0500000000000000010a12181e2225262626262626262626262626262626262626262626262626262626262626262626262626262626262423211d1710080000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000d1a2633404d596673808c99a6b3bfccd9e6ded1c5b8ab9e928578665c5044382b2733404d5a6673808d99a6b3c0ccd9e6dfd2c6b9ac9f9386796d6053463a2d201307000a1723303d4a5663707d8996a3b0bcc9d6e3d9ccbfb3a6998c807366594d403945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000b1724303c47525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c605d564c4135291d1104000005111d2a36414c56616e7b86929fa3aab0b8b9bec1c3c5c6c6c3c2bebcc0bbb9b8babfc6ced7e2ede2d5c8bcafa295897c6f6256493c2f23160900000000000815212e3b4854616e7b87929fa9b3bdc5ccd2d6dbdfdad6d2d1ced1cbc7c5c3c1c0bbb9b5afaba39f938e81756c6155473d32271b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a2d201407070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f262b2e2e34383a3c3e3f404141424141403f3e3d3b3a38342e312f2d2b28232321201d19130e090300000000000000000000070d12161819191919191919191919191919191919191919191919191919191919191919191919191919191919171714110c05000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000e1b2734414e5a6774818d9aa7b4c0cddae7ddd0c4b7aa9d9184776a544a3f342826323f4c5965727f8c98a5b2bfcbd8e5e0d4c8bbafa49a877a6e6154473b2e211408000a1724303d4a5763707d8a96a3b0bdc9d6e3d8ccbfb2a5998c7f7266594c3f3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000d1a26333f4c58646e74797979797979797979797979797979796d685d5245392c2013060000010d1925303a46535e69717e8a92989fa6abadb3b5b7b8babfbcbdbdbebfbfc0c2c4c7ccd4dce6f0e2d5c8bcafa295897c6f6256493c2f23160900000000030f1b27333f495366737f8c99a3afbbc5cfd7dde3dfd7cfcac6c5c1bfbfbab9b7b4b5afacaba39f99928d81796d605a5044352b21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001071b2834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a2d201615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b10151a1f2123282c2d2f3132343435353434333331302e2d2c28232422201f1c17161413110d08020000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0a08050000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1b2835424e5b6875818e9ba8b4c1cedbe7ddd0c3b6aa9d9083776a5d50442e2325323f4b5865727e8b98a5b1becbd8e4e4d8ccc0b6ac94887b6e6155483b2e221508000a1724303d4a5763707d8a96a3b0bdc9d6e3d8ccbfb2a5998c7f7266594c3f3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1a2734414d5a677480868686868686868686868686868686867a6d6054473a2d21140700000008131e2a36424d57616c717e868f949a9ea2a9a8aaacaeb4afb0b1b1b2b3b3b6b7bbc2cad4dee9e2d5c8bcafa295897c6f6256493c2f2316090000000005121f2b3744505b6576828f9cabb5c0cdd7e1e8dad2cdc5beb9b8b5b2b4aeacaaa8aba39f9d99928f8780786d675c51483e3323190f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13182834414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a2d2323221f1b160f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f1215181c1f202224262728282828272726242322201f1c1817151312100b06070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2935424f5c6875828f9ba8b5c2cedbe8dccfc3b6a99c908376695d5043362a25313e4b5864717e8b97a4b1becad7e4e8ddd2bbaea295887b6f6255483c2f221509000a1723303d4a5663707d8996a3b0bcc9d6e3d9ccbfb2a6998c7f7366594c403945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9292929292929292929292929292877a6d6054473a2d211407000000020e1a25313b45505a626c717c82898e9297989b9d9fa2aaa2a3a4a4a5a6a7a9abb0b8c2ccd8e3e2d5c8bcafa295897c6f6256493c2f231609000000000613202d394653606c7985929fabb8c5d1dee9dcd2c8c0bbb3adaba8a5aaa39f9d9b999992908c86827b736d665c554b40362c22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d242934414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473a30302f2e2c27211910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070c1013131518191a1b1b1b1b1a1a191816151312100c0708070603000000000000000000000000000000000000000000000000000000000106090b0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0a0a0804000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2936424f5c6975828f9ca8b5c2cfdbe8dccfc2b6a99c8f8376695c5043362924313e4b5764717e8a97a4b1bdcad7e4e2d5c8bbafa295887c6f6255493c2f22160900091623303c4956636f7c8996a2afbcc9d5e2d9ccc0b3a6998d8073665a4d403945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9a9f9f9f9f9f9f9f9f9f9f9f9f93877a6d6054473a2d2114070000000009141f29333e48505a626a6e767c8185898c8e909298959696979898999a9c9fa6b0bbc7d3dfe2d5c8bcafa295897c6f6256493c2f231609000000000814212e3b4754616e7a8797a2adbac6d3dfe1d5cac0b6aea9a19e9b98969892908e8c8986837f7b756e69605c545550473e33281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f3539414e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053473c3c3c3c3b38322b22190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090b0c0d0e0e0f0e0e0d0c0b0a08070604000000000000000000000000000000000000000000000000000000000000000000060d121618191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171614100b0500000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cfdce8dccfc2b6a99c8f8376695c5043362924313e4a5764717d8a97a4b0bdcad7e3e2d5c8bcafa295897c6f6256493c2f231609000916222f3c4955626f7c8895a2afbbd0dbe6dacdc1b4a79a8e8174675b4e413045525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7acacacacacacacacacaca093877a6d6054473a2d21140700000000030d17212c363e4850585f626a6f74797c7f8284858788898a8a8b8c8c8d8f949fabb7c4d0dde2d5c8bcafa295897c6f6256493c2f231609000000000915222f3c4855626f7b8895a9b3becad6e2ddd1c5b9aea49c97928e8c89878684817f7d7a76726e686260616364615a5044392d201408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313a4045474e5b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d6053494949494948433d342b21160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e222425282828282828282828282828282828282828282828282828282423201c171008000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5c2cfdce8dccfc2b6a99c8f8376695c5043362924313e4a5764717d8a97a4b0bdcad7e3e2d5c8bcafa295897c6f6256493c2f231609000815212e3b4854616e7b8794a9b3becad6e2dccfc2b5a99c8f827669564d413645525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4b9b9b9b9b9b9b9b9ada093877a6d6054473a2d2114070000000000050f1a242d363e464e53586062666d6f727577797a7b7c7d7e7e7f8080828f9ca9b6c2cfdce2d5c8bcafa295897c6f6256493c2f23160900000000091623303c4956636f7c8996a2afbcd0dbe6dacec1b5a89c928d85827f7d7b79777573706d67676869666d6e6f706c6155493c3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a434b5153565b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d60565656565656544e463d32271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090d10121313131313131313131313131313131313060401000005080a0b131313131313131313131313131313131313131313131313130c0b090601000000000000000009131b23292e31323535353535353535353535353535353535353535353535353531302d28221a12080000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2936424f5c6975828f9ca8b5c2cfdbe8dccfc2b6a99c8f8376695c5043362924313e4b5764717e8a97a4b1bdcad7e4e2d5c8bbafa295887c6f6255493c2f221609000714202d3a4753606d7a8697a2adbac6d3dfded1c4b7ab9e918478685e52463e45525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0c5c5c5c5c5c5baada093877a6d6054473a2d211407000000000004101c27323d474f54565858545c606365686a686d6e6f7071717273747e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f231609000000000a1723303d4a5663707d8996a3b0bcc9d6e3d9ccc0b3a6998d80787572706e6c6d6e6f70717273757678797b7c7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b555d6063636774818e9aa7b4c1cddae0d3c6b9ada093867a6d6363636363636260584e43382c1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e14191d1f202020202020202020202020202020202013110d070c1114171720202020202020202020202020202020202020202020202020191815120d0600000000000006111b252d343a3e3f414141414141414141414141414141414141414141414141413d3c39332c241a100500000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1c2935424f5c6875828f9ba8b5c2cedbe8dccfc3b6a99c908376695d5043362a25313e4b5864717e8b97a4b1becad7e4e1d5c8bbaea295887b6f6255483c2f221509000613202c3945515d677885929fabb8c5d2deded2c5b9aca196877a6e61554b4b4c525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cdd2d2d2d2c6baada093877a6d6054473a2d21140700000000000713202c38444f596063656464646363626261616162636364656566717e8a97a4b1bdcad7e2d5c8bcafa295897c6f6256493c2f231609000000000a1623303d495663707c8996a3afbccfdae5d9cdc0b3a69a8d807b7a79797979797a7b7c7e7f8082838486878984786b5e5145382b1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d6f6f6f74818e9aa7b4c1cddae0d3c6b9ada093867a6f6f6f6f6f6f6f6f6a6054483b2e2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d1813171d2123242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2524221e18110901000000010d18232d373f464a4c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4a49443e362c22170b00000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000f1b2835424e5b6875818e9ba8b4c1cedbe7ddd0c3b6aa9d9083776a5d50442e2325323f4b5865727e8b98a5b1becbd8e4e4d8ccc0b6ac94887b6e6155483b2e2215080004101d2935404b556a7783909daab6c3d0dde1d5c9bdb2a8988b7f72675d5558585a5f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddadfdfd3c6baada093877a6d6054473a2d21140700000000000916222f3b4854606b707171717170706f6e6e6e6e6d6d6d666c686d727f8b98a5b2becbd8e2d5c8bbafa295887c6f6255493c2f221609000000000916222f3c4955626f7c8895a8b2bdc9d5e1dacec1b5a89d928d888686858586868788898a8c8d8e909192999185786b5e5245382b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d797c7c7c7c828f9ca8b5c2cfdbe3d6c9bcb0a396897d7c7c7c7c7c7c7c7c6f6256493c2f231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a232a31353839393939393939393939393939393939392c29241d22282d30313939393939393939393939393939393939393939393939393932312e29231b130900000006121e29343f495156585b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b575550483e33281c1004000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000e1b2734414e5a6774818d9aa7b4c0cddae7ddd1c4b7aa9e9184776b544a3f342826323f4c5965727f8c98a5b2bfcbd8e5e0d4c8bbafa49a877a6d6154473a2e21140700010d18242f424e5b6875818e9ba8b4c1d0dbe5dacec4b7aa9e9184796d676464656668657885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d6054473a2d21140700000000000a1623303d495663707d7e7e7e7d7d7c7c7b7b7b7a7a7a797979797a7d84919eaab7c4d1dde2d6cabfb4aa95887b6e6255483b2f221508000000000714212d3a4754606d7a8796a1adb9c5d2dfddd1c5b9aea49d9a9599939292929994959697989a9b9c9e9f9e9285786b5f5245382c1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c888989898f949eaab7c3d0dce3d7cabeb1a5998f898989898989898986796c5f5246392c1f1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e19232c353c4145464646464646464646464646464646464639352f282c33393d3e464646464646464646464646464646464646464646464646463f3e3a342d251b110600000916222e3a46515b62656868686868686868686868686868686868686868686868686864615a5044392d201408000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000d1a2633404d596673808c99a6b3bfccd9e6ded1c5b8ab9e928578665c5044382b2733404d5a6673808d99a6b3c0ccd9e6dfd2c6b9ac9f9386796d6053463a2d2013070000071926323f4c5965727f8c98aab4bfcad6e2ded2c5b9aca0968e8179727171727375767785929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddae7e0d3c6baada093877a6d6054473a2d2114070000000003101c2936434f5c6976828b8b8a8a8a89898888878787868686868687899196a0acb9c5d2dedfd3c6baaea298877a6d6054473a2d211407000000000713202c3945525d687884919eabb7c4ced9e1d6cac0b6aea8a6aba49f9f9f9fa3aba2a3a4a5a6a8a9abab9f9285786c5f5245392c1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c889596969c9ea6b0bbc7d3dfe6dacdc1b6aba199969696969696969285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2a353e474d51535353535353535353535353535353535345403a31363e45494a535353535353535353535353535353535353535353535353534c4a463f372d23180d01000b1824313e4a56626d7274747474747474747474747474747474747474747474747474706c6155493c3023160a000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000c1925323f4c5865727f8b98a5b2becbd8e5dfd2c5b9ac9f9286796d6053463a2d2834414e5b6774818e9aa7b4c1cddae7ded2c5b8ab9f928578665c5044382b1f120600000a1623303d495663707c8998a2aebac7d3e0e1d5c9bdb2a89e938e847f7e7e7f808183868997a2adbac6d3dfdccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cddae1e0d3c6baada093877a6d6054473a2d2114070000000003101d293643505c6976838f9797979696959594949493939399929399969ea0a8b2bdc9d5e1dfd2c5b8ac9f928579685d5245392c2013070000000004111d2935414c566875818e9ba8b2bdc9d5dedcd2c8c0b9b5b3b5afacacacacaeb5aeafb1b2b3b5b6b7ab9f9285786c5f5245392c1f12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2a2a8aab0b8c1ccd7e3eaded2c7bdb3aba5a3a2a2a2a2a29f9285796c5f5246392c1f13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1925313c4750585e5f6060606060606060606060606060605f514b433a3e4850555760606060606060606060606060606060606060606060606060585651493f34291e1206000c1925323f4c5865727f818181818181818181818181818181818181818181818181817e7064574a3d3124170a000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000b1724313e4a5764717d8a97a4b0bdcfdae6e0d4c7bbafa399877a6e6154473b2e2834404b546975828f9ca8b5c2cfdbe8ddd0c4b7aa9d9184776a544a3f34281c100300000714202d3a4753606d7986929facb8c5d0dbe5d9cec4baafa59e96918c8a8b8b8d8e909298a2a9b3becad6e2dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0cdd4d4d4d3c6baada093877a6d6054473a2d2114070000000004101d2a3743505d6a7683909da4a4a3a3a2a1a1a1a1a0a0a0a39f9fa4abaaacb2bac4ced9e5dcd0c3b6a99d9083766a564c4135291d110400000000010d1924303d4a5763707d8a96a0acb9c1ccd8dddad2cac5c1c0c0bbb9b8b8b9bbbfbbbcbdbfc0c1c3b8ac9f9285796c5f52462d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afb5b7bbc1cad3dee9efe4d9cfc5bdb6b1b0afafafafac9f9285796c5f5246392c1f1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5d554b4045505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e221509000f1c2935424f5c6875828e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000916232f3c4956626f7c8995a9b3becad6e2e3d7cbc0b5ab96897c6f6356493c302c3845515c667784919daab7c4d0dde8dbcfc2b5a89c8f8275695c4f422e23170b00000006131f2c3845515c6776828f9caab4bfcad6e2e0d6ccc1b7afa8a09d99979798999b9d9fa2aab3bcc5d0dbe6dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4c0c7c7c7c7c7c6baada093877a6d6054473a2d2114070000000004111e2a3744515d6a7784909daab0b0afafaeaeaeadadadb5aeacacafb5b7b9bdc4ccd6e0e0d5c9bdb2a89a8d8073675a4d402f24190d0100000000000813202d3a4653606d7984919ea6b0bac3ccd2d9e0d6d1ced2ccc7c6c5c5c5c7cbd1c9cacbcdcec5b9ac9f9286796c5f493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afbbc3c7ccd3dce5eff5ebe1d7cfc7c1bebcbcbcbcb8ac9f9285796c5f5246392c1f1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845515e6a747979797979797979797979797979797976675d51454955616c7179797979797979797979797979797979797979797979797979726d62564a3e3124180b000f1c2935424f5c6875828f9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000714212d3a4754606d7a8797a1adb9c6d2dfe8dcd1beb1a4988b7e7165584b3e312d3a4653606d7986929facb9c5d2dfe6dacdc0b3a79a8d8074675a4d4134271a0600000004101c2934404b5565717e8b98a2aebac6d0dbe7ded3c9c1bab2acaaa5a4a4a5a6a8a9acaeb4bcc5ced7e1e8dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7b4babababababababaada093877a6d6054473a2d2114070000000005111e2b3844515e6b7784919eaab7bdbcbcbbbbbababab9bfbbb9b9bbc0c4c5c9ced6dedfd7cec5b9ada196897d7063564a3d3023170800000000000006121f2c3844505c66717e8b949ea8b1bbc0c7d0d4d7dcddddd7d4d2d2d2d2d3d7dcdad5d2d1cec6b9ac9f938679655b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afbbc8d3d7dee5eef7fdf3e9e1d9d2cdcac9c9c9c5b8ac9f9285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986868686868686868686868686868686796d6053474a5764717e868686868686868686868686868686868686868686868686867f7265584c3f3225190c000f1c2935424f5c6875828f9ba7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000713202c3945525d687885929eabb8c5d1dee7dacdc0b4a79a8d817467584e4337303c4955626f7c8899a3aebbc7d3e0e3d7cbc0b5ab988b7f7265584c3f3225190c000000000c18232f3a4753606d7a85929faab4bfcad6dde8dbd3ccc3bdb8b7b2b1b1b2b3b4b6b8babfc5ced7e0e9e8dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa7aeaeaeaeaeaeaeaeaeada093877a6d6054473a2d2114070000000005121e2b3845515e6b7884919eabb7c4c9c8c8c7c7c7c6d1cbc7c5c6c7ccd2d2d5d9dcd7d3cdc5bcb1a79e9184786d6053463a2d20130700000000000003101c28343f4a54616c75828f96a0a7afb6bec3c7cbd1d1d1d2d4d6d3d2d1cfcecccec9c5c4c2bfbbafa49986796c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afbbc8d5e2e8eef6fffff7efe7e0dbd6d4d3d2d2c5b8ac9f9285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79869293939393939393939393939393867a6d6053474a546773808d93939393939393939393939393939393939393939393938b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070004111d2935414c566976828f9ca9b5c2d1dce7ddd0c4b7aa9d9184776a5f53473d3a424f5965727f8c98abb5bfcbd7e3e0d3c7bbafa399897c6f6356493c30231609000000000713202c3945515d6773808d98a2aebac2cbd7dce3ded5cec8c5c4bfbdbebec0c1c3c5c6cad0d7e0e9f2e8dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9aa1a1a1a1a1a1a1a1a1a1a1a093877a6d6054473a2d2114070000000005121f2c3845525f6b7885929eabb8c1c4c6c7ccd2ced0d1d2d3d2d2d4d7d7d4d2d1d1cbc7c1bbb3aaa0958b7f72665c5044382b1f1206000000000000000c17232e3842505a606d7a8490959fa4acb2b9bbc0c2c4c5c5c7cac7c5c4c3c1c0bebdb9b7b5b2b2ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afbbc8d1d6dde4edf6f9efe5ddd5cfcac7c6c6c6c5b8ac9f9285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f93867a6d605347505c667683909c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1bfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700010d192430404d596673808c99abb4bfcbd7e3ded1c5b8aca096887b6e62584e47474b54606b7683909da9b6c3d1dce7dfd2c5b9ac9f92867a6d6053473a2d2014070000000004111d2935404b55616e7a86929fa6b0b9c2cbd1d7dcdfd9d4d1d0cccacacbccced0d2d2d4d8dde4ebf4e8dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a6774818d9494949494949494949494949493877a6d6054473a2d2114070000000006131f2c3946525f6c7985929facb2b4b7b9bbc0c0c1c3c4c6c7ccd2c8d1cbc7c5c4c2bfbab9b0a9a1989183796d60544a3f34281c10030000000000000006111c26303e45525d686e7b838d939aa0a8acafb5b5b7b8b9bbbfbab8b7b6b5b3b1b2acaba8a6a9a19e93867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2afbbc2c5cbd2dbe4eef2e7ddd3cbc4bebbb9b9b9b9b8ac9f9285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facacacacacacacacacaca093867a6d60534753606d7985929facacacacacacacacacacacacacacacacacacacaca5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c2cececececececececececececececcbfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000081724303d4a5763707d8a99a3aebac7d3e0e1d4c8bdb2a89b8e81746a60585454555c666f7c89959fabb7c4d1e3e9ddd0c3b6aa9d908377675d5145382c1f130600000000010d18242f3a46525e68727f8b949ea7b0bbc0c7cbd1d2d3d7dbd6d2d1d0ced1cbc7c5c6c8ccd2d9e2ebe8dccfc2b5a99c8f8276695c4f4336291c10000e1b2734414e5a677481878787878787878787878787878787877a6d6054473a2d2114070000000006131f2c3845515c667986939ea1a8a8aaacafb5b3b5b6b8b9bbc0babbbbc0bbb9b7b6b4aeaca69e9792867c6f665c5142382e23170b0000000000000000000a151e2935414c565e696e79818891969b9fa3aba9aaabacafb4aeacaba9a8a6a4a8a19e9b999696918f867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a2acb4b5bac0c9d2dde8ebe0d5cbc1b9b2aeadacacacacac9f9285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9ada093867a6d60534855626f7c8898a2aebab9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c2ced8d8d8d8d8d8d8d8d8d8d8d8d8ccbfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000714202d3a4753606d7a86929facb9c5d0dbe5d9cec3b9ac9f93887c6f6a63616062676d7883909da7b1bcc7d3e0e1d5c9beb3a9998d807366554b4035291d1004000000000007131d2a36414c56606c77828f959fa6afb5babfc4c5c7cbcfcac6c5c3c1bfbfbab9b9bbc0c7d0d9e4e8dccfc2b5a99c8f8276695c4f4336291c10000714212e3a4754616d7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b796c605346392d201306000000000713202d3a4653606d79868e9196989b9d9fa4aba6a8a9abacafb5aeaeaeb5afacaba9aba39f9b948f857d6f6a5f544b4030261c1106000000000000000000030c1924303a444d575e676d747d84898f9299999c9e9e9fa3aaa29f9e9c9b99979596918f8c8987858280796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88959f9fa7a9afb7c0cbd6e2e6dbcfc4b9afa7a2a09f9f9f9f9f9f9285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5c6c6c6c6c6b9ada093867a6d60534b5865717e8b98aab4bfcac6c6c6c6c6c6c6c6c6c6c6c6c6c6c6beb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5c2cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbbfb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000613202c3945515d6776828f9caab4bfcad6e3e0d4c8bbafa49a92857c746f6e6d6f7279828f959fabb9c2cdd8e4dfd2c6b9ada197897c6f6356493c2f24180c000000000000010d1925303b44505b656d798390949fa3abaeb4b7b9bbbfbbbeb9b8b6b4b2b4aeacacafb6bec7d2dde8dccfc2b5a99c8f8276695c4f4336291c10000713202d3946525e686d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c665b5044382b1f1206000000000613202d394653606c787e8184888b8e919399989a9b9d9e9fa4a0a1a1a1aba39f9e9c9a99928f89827b6f6b60584e42392e1e140a000000000000000000000008131e28323b454d555d606b70787d82868a8c8f9192929993989291908e8d8b898784827f7d7a7876746d675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c889393939a9da5afbac5d1dee3d6cabeb2a79d96939393939393939285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2d2d2d2c6b9ada093867a6d60534b556774818e9aa7b4c1d0dbd2d2d2d2d2d2d2d2d2d2d2d2d2cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b5bebebebebebebebebebebebebebebebebeb3a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000004111d2935404b5565727e8b98a2aebac7d2dde4d8ccc0b6aca1979286817c7a7a7b7f848f949ea7b1bccbd4dee4d8ccc0b6ac9e9185786c605346392d2013070000000000000008141e27333f49535d676d7a828c92999fa3abaaacaeb5aeb3adabaaa8a6aba39f9fa4acb6c0ccd8e4dccfc2b5a99c8f8276695c4f4336291c100005111d2935414c565e6161616161616161616161616161616161605b544a3f33281c0f030000000006121f2b3844505b666c7174787b7f818486898b8d8e9091939994949595949992918f8d8a86827d756e6960594f463c30271d0c020000000000000000000000020c162029333b434b515960656c70757a7d808284858687868685848382807e7c7a787573706d686967605c554b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c868686868e939da9b5c2cedbe1d4c7bbaea2968b868686868686868686796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfdfd3c6b9ada093867a6d6053515d677784909daab7c3d0dddfdfdfdfdfdfdfdfdfdfdfdfd8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba8b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a6998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000010d18242f3a4754606d7a86929fabb5c0ccd7e1ddd2c7beb3a9a198928e898787888b91969ea6b0b9c3cddde6ded4c8bbafa49a8d8073665b5044382b1f120600000000000000020b17222d38414c555d686d7880878e92999b9d9fa3aba1a9a29e9d9b99979992939aa4afbbc8d4e0dccfc2b5a99c8f8276695c4f4336291c1000010d1925303a444c52545454545454545454545454545454545453504a42382d22170b0000000000030f1c28333f4a545b606468696e7275777a7c7e808283858686878788888787868483807d7a75706b615e574f463d342a1e150b00000000000000000000000000040e172029313a41454f535b6063686d7073767778797a7a797978767573716f6d67686663615e565a53514b43392e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4754606a7679797979818e9aa7b4c1cddae0d3c6b9ada0938679797979797979797974695d5144382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605353606d7a86929facb9c5d2dfe8e4e0dfe0e4e8eef5ecece5d8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f9ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5998c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2014070000000713202c3945525d6874818e99a4afbbc5d0dbe4d9d0c5bbb3aaa39f9a96949395989ea1a8b0b8c1cbd4dfe0d7cbc0b5ab9f93877b6e61544a3f33281c0f03000000000000000006111b262f3a434c565d666d737b81868b8e9192999495949792908e8c8a888688939facb9c6d2dfdccfc2b5a99c8f8276695c4f4336291c10000008131e28323a4146474848484848484848484848484848484846443f382f261c11060000000000000b17222d38424a505357575f626568676d6f7273757678797a7a7b7b7b7b7a79787673716d68636059534d453d342b22180c030000000000000000000000000000050e171f282f353d41495053565e616366696b6b676d6d6c666b6968666462605d55595654524c4d4645403930271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5860626c6c6c74818e9aa7b4c1cddae0d3c6b9ada093867a6d6c6c6c6c6c6c6c6962584d4135291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605356636f7c8999a3afbbc7d4e0ddd8d4d2d4d8dde4ebf4f1e5d8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875828f98989898989898989898989898989898989898989898988c807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000004111d2935414c56626e7c87939faab3becad6dce2d7cdc5bcb4aeaca7a2a1a0a2a5abacb2bac1cad3dde1d8cec6bbafa3998e8275695f5342382d22170b000000000000000000000a141d28313a444c545c60696e757a7e81848687888887868583817f7e7b7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000020c1620283035393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3938332d261d140a0000000000000006111c262f383f44464b4d535558555d60636567686a6b676d6d6e6e6e6e6d6c66696764605d56544f46423b332b2219100600000000000000000000000000000000050d161d24292f383f44464c525457595c5e555d6060605b545d5b5a585654514c4c4a474641413a38342e271e150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323c464e545560606774818e9aa7b4c1cddae0d3c6b9ada093867a6d6060606060605f5d5850463b3025190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60535965727f8c98abb5c0cbd7d9d2ccc8c6c8ccd2d9e2ebf5e5d8cbbeb2a5988b7f7265584c3f3225190c000f1c2935424f5c6875818b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b807366594d4033261a0d000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d201407000000010d19242f3a47535f6a74818e98a2aebac1cad8dddfd7cfc6bfbab9b4afadadaeb2b7b9bdc4ccd3dce0d8cfc6bcb2a89f92877b6e62574d422f261c110600000000000000000000020b161f28323a424a51575f62686d717577797a7b7b7b7a78777573716e7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000040e161e25292d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b28221c140b0200000000000000000a141d262d3338393e4247484c4b515356585a5b5d555d60616162626161605b545a5754524c48443d36312921191007000000000000000000000000000000000000040c13181d262d33373a4146474a4d4f514b51545353504a504f4d4b49474541403d3a3936302d2c28231d150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202b343c434749535b6774818e9aa7b4c1cddae0d3c6b9ada093867a6d60535353535352514d463e342a1f14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053566875818e9ba8b5c1d1d9d0c7c0bbb9bbc0c7d0d9e4eee5d8cbbeb2a5988b7f7265584c3f3225190c000a1724303d4a5763707d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6256493c2f231609000000000000000013202c3946535f6c7986929facb9c5d2d9d9d3c6b9ada093867a6d6053473a2d2014070000000008131e2b37434e58616e7b85929fa5afb8c1ccd2d9e1d8d1cbc7c5c1bcbababbbec4c5c9ced6deddd7cec6bdb4aaa0968d8074695f53453b311d140a000000000000000000000000040d162028303940444d53565d616568666d6e6e6e6e6d676a6866646c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000040c13191d202121212121212121212121212121212121201f1c17110a02000000000000000000020b141c22282b2d31373a3b3f404547494b4d4f504b515354545555545453504a4d4a4745413a38322a251f170f07000000000000000000000000000000000000000001070b141b22272b3036393a3d4043444145474746443f4342403e3c3a39352f302e2d2a25201f1c18120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222b32373b414e5b6774818e9aa7b4c1cddadbd3c6b9ada093867a6d6053474646464644413b342c22180d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60535e687784919eaab7c4d1d2c7beb6afacafb6bec7d2dde8e5d8cbbeb2a5988b7f7265584c3f3225190c000916232f3c4855616b70727272727272727272727272727272727272727272727272726f6a6054473b2e221508000000000000000013202c3946535f6c7986929facb9c5ccccccccc6b9ada093867a6d6053473a2d20140700000000010f1a26313c46525e69717e8b939ea6b0bbc0c7d0d5d9dcd7d3d2cdc9c7c6c8cbd1d2d5dadcd7d2ccc4bcb4aba2989184796d60574d4233291f0b0200000000000000000000000000040d161e272e343c42474c525458545c6061616261605d555b595f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000002080d1113141515151515151515151515151515151513120f0b06000000000000000000000000020a11171c1f20262b2e2f2f35393a3c3f40424340454747484848484746443f403e3a39352f2c27211a140d050000000000000000000000000000000000000000000000020a11171b1f252a2d2e3033362f35393a3a3938332d3533312f2d2c29242321201d191313100c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101920272b34414e5b6774818e9aa7b4c1cdcfcfcfc6b9ada093867a6d6053473a3939393835302a221a1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6054616d7a8796a0acb9c5d2ccc0b6aca49fa4acb6c0ccd8e4e5d8cbbeb2a5988b7f7265584c3f3225190c000714202c38444f596163656565656565656565656565656565656565656565656565656260584e43372b1f1306000000000000000013202c3946535f6c7986929facb9bfbfbfbfbfbfb9ada093867a6d6053473a2d20140700000000000a15202a36424d57626c74818e949ea6afb6bec3c9ced2d5dadadad5d4d3d5d8dbdcd7d3d1cbc7c0bbb2aaa29992867c6f675d51453c3121180d000000000000000000000000000000040c151c232831373a4146474b4a50535455555453514b4e525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c1000000000000000010507070808080808080808080808080808080806060300000000000000000000000000000000060b0f12131a1e212224292c2d303234352f35383a3a3b3b3b3b3a3938332d312d2c29241e1b160e09030000000000000000000000000000000000000000000000000000060b0f13191d202124262924292c2d2d2d2b28222827252321201d19171413110d08060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f151b2834414e5b6774818e9aa7b4c1c2c2c2c2c2b9ada093867a6d6053473a2d2d2c2b29251f18100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605763707d8a96a8b2bdc9d4c8bbafa49a939aa4afbbc8d4e0e5d8cbbeb2a5988b7f7265584c3f3225190c0004101c28333e474f55575858585858585858585858585858585858585858585858585856544e463d32271b0f03000000000000000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2ada093867a6d6053473a2d2014070000000000030e1a25303b45505a606d78828f939fa4acb2b9bdc4c5c9cfcecfcfd0d0d0cfced1cbc7c5c0bbb5afa8a19892877d706a60554b40332a200f0600000000000000000000000000000000030b12181f262b3035393a3e3f44464748484847454045525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090e121415181d1f202325272824292c2d2e2e2f2f2e2e2d2b28222421201d1913100b0400000000000000000000000000000000000000000000000000000000000003080d111314171a1c181d202120201f1c171c1a18161413110d08070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a1b2834414e5b6774818e9aa7b4b5b5b5b5b5b5b5ada093867a6d6053473a2d201f1f1c19140d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60596673808c99a6b3bfcec9bdb2a89f9386939facb9c6d2dfe5d8cbbeb2a5988b7f7265584c3f3225190c00000b16212c353e44484a4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4947433d342b20160a00000000000000000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a093867a6d6053473a2d20140700000000000009141f29333e44515c666d79818d939aa0a8acb2b8b9bdbfc1c2c3c3c3c3c2c2c0bfbab9b5afaba49f9691867e706b61584e43392f21180e00000000000000000000000000000000000000070c151a1e24292d2e2e34383a3b3b3b3b3a393545525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608070c10131416181a1c181d1f20212122222121201f1c17171413110d080100000000000000000000000000000000000000000000000000000000000000000000010507070a0d070d1113141413120f0b060d0b090706040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7a8a8a8a8a8a8a8a8a8a093867a6d6053473a2d201407100d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60576975828f9ca8b5c2cfc5b9aca0969184919eaab7c4d1dde5d8cbbeb2a5988b7f7265584c3f3225190c000005101a232c33383c3d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b37322b22190f0400000000000000000013202c3946535f6c79869299999999999999999999999993867a6d6053473a2d201407000000000000030d17212834404a545d676d78808891969ea0a8abadb2b2b4b5b6b7b7b6b6b5b3b4aeacaba39f99938d847c706c61594f463c31271d0f06000000000000000000000000000000000000000003090e13191d202123282b2d2e2e2f2e2d2c3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0d070c10131414151515151413120f0b060706040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070706060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9a9c9c9c9c9c9c9c9c9c9c9c93867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605f697885929eabb8c5d1c4b7aa9e918483909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000008111a21282c2f30323232323232323232323232323232323232323232323232322f2e2b27201910070000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c86796d6053473a2d20140700000000000000050f18232e39424b555d666c737d848b91969a9ea1a9a6a7a9a9aaaaa9a9a8a6aba39f9c99928e8781796f6a615a50473e342b1f150b000000000000000000000000000000000000000000000002080d111314171c1f2021222221202c3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000004060707080808080706060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e8f8f8f8f8f8f8f8f8f8f8f8f8f867a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60616e7b8897a1adb9c6cec1b5a89b8e8183909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000810161c2023242525252525252525252525252525252525252525252525252523221f1b160f0700000000000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f786d6053463a2d201307000000000000000007121c273039434b545b606b6f787e84898e919697999b9c9c9d9d9d9c9b9a989992908b86817c746d67605850473e352c22190d0300000000000000000000000000000000000000000000000000010507060b101213141515151f2c3945525f6c7885929fabb8c5d2dedccfc2b5a99c8f8276695c4f4336291c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b13131313131313131313131313131313131313131313131313131312110f0b0601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f828282828282828282828282828282796d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6064717e8a97a9b3bec9ccbfb2a5998c7f83909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000050b10141617191919191919191919191919191919191919191919191919191615130f0a040000000000000000000000000c1825323e4b57636d727373737373737373737373737373736d665c5144382c1f12060000000000000000000b151e273139424a505960666d71787c8184878a8c8e8f909090908f8f8d8b8986837f7a756e6a605d554e463e352c231a100700000000000000000000000000000000000000000000000000000000000000030607080808121f2c3945525f6c7885929fabb8c5d1d1d1cfc2b5a99c8f8276695c4f4336291c10000000000003090d101213131313131313131313131313131313131313131313131313131313131313131313130908060300000000000000000000000002070a0c0d1313131313131313131313131313130808060200000000000000000000000000000000000000000000000000000000000000050c111417172020202020202020202020202020202020202020202020202020201e1d1b17120c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4a56626d727575757575757575757575757575756d675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d606773808d9aa6b3c0cfc9bdb2a896897d83909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000407090a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0908060300000000000000000000000000000a16222f3a46515b6366666666666666666666666666666666605c544a4034281c1004000000000000000000030c151f272f383f444f545c60666c7074787b7e7f8182838484838382807f7c7976726e68625f58514b433c342c231a11080000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabb8c5c5c5c5c5c2b5a99c8f8276695c4f4336291c1000000000070e14191d1f20202020202020202020202020202020202020202020202020202020202020202020201615130f0a04000000000000000000070e1317191a2020202020202020202020202020201514120e0903000000000000000000000000000000000000000000000000000000000810171d2123242d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2a27231d160e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222e3a46515b6265696969696969696969696969696969605c554b4034291c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60667683909ca9b6c3cfc5b9aca196877a83909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f4951575959595959595959595959595959595953514a42392e23180c0000000000000000000000030d151d262d333d424a51545b606367696e7173747676777776767573726f6d6765615e56534e45413a312b221a1108000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabb8b8b8b8b8b8b8b5a99c8f8276695c4f4336291c100000000811191f25292b2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d23221f1b160f07000000000000010a12191f2326262d2d2d2d2d2d2d2d2d2d2d2d2d2d2d22211e1a150e06000000000000000000000000000000000000000000000000000008121a22282d30313939393939393939393939393939393939393939393939393939393837332e2820180e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e29343f495156585c5c5c5c5c5c5c5c5c5c5c5c5c5c5c53514b43392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d606d7985929facb8c5d1c4b7ab9e91847883909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4644403930271c1207000000000000000000000000030b141c2228303940444a505356575e6164666869696a6a6a6968676563605c5554524c47433c352f281f19100800000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929fabababababababababa99c8f8276695c4f4336291c10000007111a232a31353839393939393939393939393939393939393939393939393939393939393939393939392f2e2b272019100700000000000a131c242a2f32333939393939393939393939393939392f2e2b2620180f0600000000000000000000000000000000000000000000000005101a242c33393d3e46464646464646464646464646464646464646464646464646464645433f3a322a200e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4745403931271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d626f7c8898a2aebac6cec1b5a89b8e827683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353a3e3f4040404040404040404040404040403a38342e271e150b0000000000000000000000000000020a11171e272e34383f4446494d535457595b5c5d5d5d5d5c5c5a585653514b4746413b373129241d160d070000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929e9e9e9e9e9e9e9e9e9e9e9c8f8276695c4f4336291c1000030e19232c353c414546464646464646464646464646464646464646464646464646464646464646464646463c3b38322b22190f0400000007121c262e353b3f404646464646464646464646464646463b3a37312a21180e0300000000000000000000000000000000000000000000000c17222c363e45494a53535353535353535353535353535353535353535353535353535351504b443c3220170c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b252d343a3e3f4242424242424242424242424242423a38342f271f150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d65717e8b98aab4bfcaccbfb2a5998c7f7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2f32333333333333333333333333333333332d2c28231c150c0300000000000000000000000000000000060c151c23282d3338393d4246484b4c4e4f50515150504f4d4c494745403b3936302b262018130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3945525f6c7885929292929292929292929292928f8276695c4f4336291c100009141f2a353e474d5153535353535353535353535353535353535353535353535353535353535353535353534947433d342b20160a0000020e19242e3840474b4d5353535353535353535353535353534847423c332a2015090000000000000000000000000000000000000000000005111d28333e485055576060606060606060606060606060606060606060606060606060605e5c564e4432291e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e31323636363636363636363636363636362d2c29231d150d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6774818e9aa7b4c1d0c9bdb2a896897d7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12181e222526262626262626262626262626262626201f1c18120b03000000000000000000000000000000000000030b12181c22282b2d31363a3b3e404143434444434342403f3c3a38342f2d2a251e1a150d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b778485858585858585858585858585858175685b4f4235281c0f000d1925313c4750585e5f6060606060606060606060606060606060606060606060606060606060606060606056544e463d32271b0f030007131f2a35404a52575960606060606060606060606060606055534e453c31261a0e020000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b686056443a3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e222425292929292929292929292929292929201f1c18120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d677783909daab7c3d0c5b9aca196877a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d121618191919191919191919191919191919191312100c0700000000000000000000000000000000000000000000070c11171c1f20252a2d2e313335363637373736353432302d2c2923201e19140f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a37434f5c6772777878787878787878787878787878756f65594d4134271b0e00101d2935414d58626a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6260584e43382b1f1306000a17232f3b47525c63666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5f574e42372b1e12060000000000000000000000000000000000000000000a1723303d4955616c71797979797979797979797979797979797979797979797979797979787268564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d121518191c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1413100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6d7a86929facb9c5d1c4b7ab9e9184787683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0706040000000000000000000000000000000000000000000000000000060b0f12131a1e2121242628292a2a2a2a2929272523201f1c1814110e080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b27333f4b5660676b6b6b6b6b6b6b6b6b6b6b6b6b6b6b68655d53483d3125180c00121f2b3845515e6a7479797979797979797979797979797979797979797979797979797979797979797979796f6a6054473b2e221508000c1926323f4b57636e73797979797979797979797979797979766a5f53473a2e2114080000000000000000000000000000000000000000000b1724313e4a5764717e8686868686868686868686868686868686868686868686868686868478685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6f7c8999a3afbbc7cec2b5a89b8f82757683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090e12141518191b1c1d1e1e1d1d1c1a19161413100c070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3a444e565c5e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b59534b41372c2015090013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686867c6f6256493c2f231609000d1a2633404d596673808686868686868686868686868686867c6e6255483b2f221508000000000000000000000000000000000000000003101c28343f4a546773808d9393939393939393939393939393939393939393939393939396877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d727f8c98abb5c0cbccbfb2a5998c7f727683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000000000000000000000306070707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0d0e1010111110100f0d0c09070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d28323c444b4f5152525252525252525252525252524f4d48413930251b0f040013202c3946535f6c7986929393939393939393939393939393939393939393939393939393939393939393897c6f6256493c2f231609000d1a2633404d596673808c93939393939393939393939393887b6e6255483b2f221508000000000000000000000000000000000000000006121f2b3844505c667683909c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa8968a7d7063574a3d302417090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d75818e9ba8b5c1d1c9bdb2a896897d707683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000000000000060b1012131413110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c16202a323a3f4344454545454545454545454545454542413d3730271e1409000013202c3946535f6c7986929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f95897c6f6256493c2f231609000d1a2633404d596673808c999f9f9f9f9f9f9f9f9f9f9f95887b6e6255483b2f22150800000000000000000000000000000000000000000713202d3a4653606d7985929facacacacacacacacacacacacacacacacacacacacacacaca6998c807366594d4031261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d7784919eaab7c4d1c5b9aca196877a6d7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000000000000000000000000002060a0f11171c1f2021201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607070707070707070707070707070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1820282e33373838383838383838383838383838383534312c251e150c02000013202c3946535f6c7986929facacacacacacacacacacacacacacacacacacacacacacacacacacacacaca295897c6f6256493c2f231609000d1a2633404d596673808c99a6acacacacacacacacaca195887b6e6255483b2f22150800000000000000000000000000000000000000000916222f3c4955626f7c8898a2aebab9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b5a99c8f827669574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d7a8796a0acb9c5d1c4b7ab9e918478687683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000000000105090e12151b1c23282b2d2e2d29241e160e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b1012131313131313131313131313131312100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e161d23272a2b2c2c2c2c2c2c2c2c2c2c2c2c2c2c282725201b140c0300000013202c3946535f6c7986929facb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9afa295897c6f6256493c2f231609000d1a2633404d596673808c99a6b3b9b9b9b9b9b9b9aea195887b6e6255483b2f22150800000000000000000000000000000000000000000b1825323e4b5865717e8b98aab4bfcac6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5b8ab9e928578695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a707d8a96a8b2bdc9cec2b5a89b8f82756a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000000000104080d11151a1e21272b2e34383a3a3935302820160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20202020202020202020202020201f1c17110a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c12171b1d1e1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c1b18150f09020000000013202c3946535f6c7986929facb9c5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6bcafa295897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfc6c6c6c6c6bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000004101d2935404b556774818e9aa7b4c1d0dbd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c6b9ada197887b6e6155483b2e22150600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a737f8c99a6b2bfceccbfb2a6998c7f736a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000000000001070d1114191e20262b2d3237383f44464746413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c23282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28231c150c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001060b0f111112121212121212121212121212120f0e0c090400000000000013202c3946535f6c7986929facb9c5d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c8bcafa295897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd2d2d2c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000613202c3945515d677784909daab7c3d0dddfeae2dbd6d3d2d2d2d2d3d7dce3eae2d6cabeb3a9978a7e7164574b3e2e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a75828f9ca8b5c2cfc9bdb2a896897d706a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000002080e13181d20252a2d31373a3d43474a505354524c443a3024190d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e262e34383a3a3a3a3a3a3a3a3a3a3a3a3a3a38342e261e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfdfdfdfdfdfddd8d5d4d4d4d4d4d4d4d4d4d4d4d4d4c8bcafa295897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd9dfd4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000714202d3a4753606d7a86929facb9c5d2dfeae0d8d0cac6c5c5c5c5c7cbd1d8e1e6dacfc0b3a79a8d807467544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7885929eabb8c5d1c5b9ada196877a6d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000000050d14191d24292c3036393c4247484e54545c60615d564c4135291f140800000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f444646464646464646464646464646443f3830281f160c0100000000000000000000000000000000000000000000000000000000000000060b0e10111313131313131313131313131313131313131313131313130e0d0b07030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecece8dfd8d1ccc9c8c7c7c7c7c7c7c7c7c7c7c7c7c7bcafa295897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000000091623303c4956636f7c8999a3afbbc7d4e0e1d8cec6bfbab8b8b8b9bbbfc6cfd8e3dccfc3b6a99c908376665c5044382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7b8897a1adb9c6d1c4b7ab9e918478686a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000050e171f252a2f35393b4146474d5355586062666d6d685d52463b3025190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424a505353535353535353535353535353504a423a31281d13070000000000000000000000000000000000000000000000000000000000040b11171b1d1e2020202020202020202020202020202020202020202020201a1917130e0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfece9dfd6cdc6c0bcbbbabababababababababababababaafa295897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000000000c1926323f4c5965727f8c98abb5c0cbd7e2d8cfc6bcb4aeacacacacaeb5bdc6d1dcdfd2c5b8ac9f9285796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a7e8a97a9b3bec9cec2b5a89b8f8275686a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000020d17202930363a4145474c5254575f61666a6f74797a6d61564d41362a1c11060000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c60606060606060606060606060605c544b433a2f24180d01000000000000000000000000000000000000000000000000000000050e161d22272a2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2726231f19120b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfece2d8cdc4bbb5b0aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea295897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000005111e2a36414c566875828e9ba8b5c1d1dcdcd1c6bdb4aaa29f9f9f9fa3abb5bfcbd7e0d3c7baaea298887c6f6255493c2f221607000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a808d9aa6b3c0cfccbfb2a6998c7f73666a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000008141f29323b41464b5154565e6165696e73777c80858175685e5246382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c666d6d6d6d6d6d6d6d6d6d6d6d6d6d665d554b4035291d11040000000000000000000000000000000000000000000000000000000e1720282e3336373939393939393939393939393939393939393939393939393433302b241d140b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecddd1c6bbb2aaa4a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a195897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000713202d3946525e687884919eabb7c4d1ded7cbbfb4aba2989292929299a3aebbc7d3e0d6cabfb4aa988b7e7265584b3f2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867983909ca9b6c3cfc9bdb2a8968a7d70636a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00020e1925303b444d52555d6064686e72767b8084898d91867b6e61544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787979797979797979797979797976675d5145392c2013060000000000000000000000000000000000000000000000000000040d202932393f4344464646464646464646464646464646464646464646464646413f3c362e261d120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecd8ccc0b5aaa098959494949494949494949494949494949494897c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000714212e3a4754616d7a8796a1acb9c5d2ded3c7baaea3998a86858587929facb9c5d2dfdbd0c1b4a79b8e817468554b4035291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6baada093877a85929facb8c5d2c5b9ada196877a6e616a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0005111e2a36414d565e61676d71767a7f83888c91969a998c7f73665b5044382b1f1409000000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a778386868686868686868686868686796d6053473a2d20140700000000000000000000000000000000000000000000000000010c161f323b444b4f515353535353535353535353535353535353535353535353534d4c4740382e24190e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecd5c9bcb0a4988e888787878787878787878787878787878787877c6f6256493c2f231609000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000a1724303d4a5763707d8a96a8b2bdc9d5dfd2c5b9ac9f92867879797f8c99a5b2bfd0dbddd0c3b7aa9d908477675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe2d5c9bcafa296897c8998a2aebac6d1c4b8ab9e918478685e6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000714202d3946525e686e757a7e82868b9095999ea0a89e9184786c6053463b31251a0e000000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909393939393939393939393867a6d6053473a2d2014070000000000000000000000000000000000000000000000000008131e2831444d565b5e6060606060606060606060606060606060606060606060605a58524a40362b1f1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe1d4c8bbaea195887c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b796d6053463a2d201307000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfcedaddd0c3b7aa9d90847766707d8a96a9b3becad6dfd2c6b9ac9f93867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe5d8cbbeb2a5988b7f8b98aab4bfcacec2b5a89b8f827568566a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000814212e3b4754616e7b81868b8f92999d9fa7aaacaca1968a7d7063574d42362a1c12070000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909da0a0a0a0a0a0a0a0a093867a6d6053473a2d201407000000000000000000000000000000000000000000000000010d19242f3a43565f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c67645c52473c301c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d675c5145382c1f1306000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000006121e2b37424d576976828f9ca9b5c2cfdcdbcec1b4a89b8e8175686e7b8797a2adbac6d3dfd4c7bbafa499897c706356493d302316080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe7dbcec1b4a89b8e818e9ba8b4c1d0ccbfb2a6998c7f73665d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000713202d3a4653606d798592989c9fa3ababb1b7b9b2a89c8f8275695e5346392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaacacacacacacaca093867a6d6053473a2d20140700000000000000000000000000000000000000000000000004111d2935414c56677177797979797979797979797979797979797979797979797979746e64584c382e23170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6161616161616161616161616161616161605c554b4034281c1004000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000814212d3a47535f697885929fabb8c5d2ded8ccbfb2a5998c7f7266697885929fabb8c5d2ded7ccc0b5ab998c7f7266594c3f3025190e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfeaddd1c4b7aa9e9184919eaab7c4d1c9bdb2a9968a7d70635d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0006131f2c3845515c6673808d9aa4acafb5b8bcc2c4b9ac9f93877b6e61544a4034281c100400000000000000000000000000000000000000000000000000000000000407090a0b0b0b0b111e2a3744515d6a7784909daab7b9b9b9b9b9ada093867a6d6053473a2d20140b0b0b0b0b07060401000000000000000000000000000000000613202c3945525d687783868686868686868686868686868686868686868686868686807467544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d605454545454545454545454545454545453514b43392e23180c00000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000815222e3b4855616e7b8897a2adbac6d3dfd6cabeb3a9968a7d7063697683909ca9b6c3cfdcddd2c1b5a89b8e827568564d41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecded2c5b9aca0969196a0acb9c5d2c5b9ada196877a6e615d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0004101c2834404b54616e7b87939facb9c0c7c8cdc7bbafa4998d8073665c5144382c1f1509000000000000000000000000000000000000000000000000000000050b1013161618181818181e2a3744515d6a7784909daab7c3c6c6c6b9ada093867a6d6053473a2d201818181818181413110d080100000000000000000000000000000714212d3a4754606d7a869393939393939393939393939393939393939393939393908376665c5044382c1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d60534848484848484848484848484848484645403930271d120700000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000000000b1824313e4b5764717e8a97a9b3becad6dfd3c6baada297877b6e616774818d9aa7b4c0cddaded1c4b7ab9e918478685e5246392d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfece1d5c9bdb2a8a09ea0a8b2bdc9d1c4b8ab9e918578685e5d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000c18232e3946535f6976828f9ca8b2bdc9d4d7ccc0b5ab9e9185796d6053463c31261a0e0100000000000000000000000000000000000000000000000000070f161c2022232424242424242a3744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a2d2424242424242421201d19130c04000000000000000000000000000a1723303d4a5663707d899aa49f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9285796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473b3b3b3b3b3b3b3b3b3b3b3b3b3b3a38342e271e150b0000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000004101c2834404a546774808d9aa7b3c0cfdbded2c5b8ab9f928578695e65727e8b98a5b1becfdadfd2c5b9ada196877a6e6154473b2e21140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfece5d9cec4bab2acaaacb2bac4cecfc2b5a89c8f827569565d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000007121d2a36424d5764707d8a96a1adb9c7d1dcd2c7b9ada1978a7d7164574d42372b1d120700000000000000000000000000000000000000000000000007111921272c2f30313131313131313744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a31313131313131312d2c29241e160d040000000000000000000000000c1926333f4c5966727f8c99acb6acacacacacacacacacacacacacacacacacacaea298887c6f6255493c2f2216070000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c28231d150c030000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000006121f2c3844515c667683909da9b6c3d0dcdccfc3b6a99c9083766957636f7c8996a8b2bdc9d5e1d5c9bdb2a8978a7d7064574a3d2d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecebe0d5ccc4bdb9b7b9bdc4ccd5ccbfb2a6998c7f7366595d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c0000000e1a26313b4653606d7884919eabb5c0cbd7d5c9beb3a99c8f8276695f5347392f23180c0000000000000000000000000000000000000000000000050f19232b33383c3d3e3e3e3e3e3e3e3e44515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473e3e3e3e3e3e3e3e3e3a39352f281f160c010000000000000000000005121e2a36424d576875828f9ba8b5b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9bfb4aa988b7e7265584b3f2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d212121212121212121212121201f1c18120b03000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000713202d3a4653606d7986929facb9c5d2dfdacdc0b4a79a8d8174675a606d7a8796a1adb9c5d2dfdacfc0b3a6998d80736653493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecf1e7ded5cec9c5c4c5c9ced5d5c9beb2a9968a7d7063575d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000009141f2b3844505c6673808c99a3afbbc7d4dacfc4b9ac9f93877b6e62554b4034291c1004000000000000000000000000000000000000000000000b16212b353d4448494b4b4b4b4b4b4b4b4b515d6a7784909daab7c3d0d3c6b9ada093867a6d60534b4b4b4b4b4b4b4b4b4b4745413a31281e1308000000000000000000000714202d3a46525e697885919eabb8c4c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d0c1b4a79b8e817468554b4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d2015151515151515151515151313100c070000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000916222f3c4955626f7c8898a3aebac7d3e0d8cbbeb1a5988b7e7265585d687884919eabb7c4d1dedccfc2b5a99c8f8276655b5044372b1f1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfecf2f0e7e0d9d5d2d1d2d5d9dfd2c6b9ada197877a6e61545d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c00000003101c28343f4a54616e7b87929facb9c4ced9d4c8bbafa49a8d8073675c5145382c1f150a00000000000000000000000000000000000000000004101c27333d474f5456575757575757575757575d6a7784909daab7c3d0d3c6b9ada093867a6d60575757575757575757575754524c433a2f24190d010000000000000000000815212e3b4854616e7b8797a1adb9c6d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0c3b7aa9d908477675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140808080808080808080807060400000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000000000c1825323f4b5865727e8b98aab4bfcbd7e1d5c9bdb2a896897c6f6356566975828f9ca8b5c2cfdbded2c5b8ab9f9285796c605346392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe5e5e5e5e5e5e1dedddee1e5ded1c4b8ab9e918578685e525d6a7683909da9b6c3d0dce5d8cbbeb2a5988b7f7265584c3f3225190c000000000b17232e3846525e6975828f9ba8b2bdc9d5d8ccc0b6ac9e9285796d6053473c31261b0f0100000000000000000000000000000000000000000713202c38444f59606364646464646464646464646a7784909daab7c3d0d3c6b9ada093867a6d646464646464646464646464605d564c4135291d11040000000000000000000b1724313e4a5764717d8a97a9b2bec9d5e1e1dad5d2d1c9c9d2d4d7dce3dfd2c6b9ac9f93867a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000004111d2935414c556874818e9ba7b4c1d1dcdfd2c5b9ada196877a6d60545a6673808d99a6b3c0d1dcdfd3c6baada297887b6e6255483b2f221507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2d9d9d9d9d9d9d9d9d9d9d9d9d9d9cfc2b5a89c8f827569564d5d6a7683909da9b6c3d0d9d9d8cbbeb2a5988b7f7265584c3f3225190c0000000006111c2a36424d5763707d8996a0acb9c6d1dcd2c7b9ada2978b7e7164584e43372b1d130700000000000000000000000000000000000000000916222f3c4854606b707171717171717171717171717783909daab7c3d0d3c6b9ada093867a717171717171717171717171716d685d5245392c2013060000000000000000030f1c28333f4a546773808d9aa6b3c0cfdadfd6cfc9c6c5bcbcc5c7cbd1d9e0d4c7bbafa499897c706356493d3023160900000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000613202c3945515d677784919daab7c4d0ddded1c4b7ab9e918478685d525764717e8a97abb5bfcbd7e2d6cabeb3a9978b7e7164584b3e2e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5ccccccccccccccccccccccccccccccccbfb3a6998c80736659505d6a7683909da9b6c3cccccccccbbeb2a5988b7f7265584c3f3225190c00000000000e1a25303b4653606c7884919eabb4bfcbd7d6cabeb3a99d9083766a5f53473a2f24180d01000000000000000000000000000000000000000a1623303d495663707d7e7e7e7e7e7e7e7e7e7e7e7e7e84919eabb7c4d1d7cabeb1a4978b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7a6d6054473a2d211407000000000000000006121f2b3844505b6676838f9ca9b6c2cfdcd6cdc5beb9b8afafb9bbc0c7cfd9d7ccc0b5ab998c7f7266594c3f3025190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000714212d3a4754606d7a86939facb9c6d2dfdbcfc2b5a89c8f827569564c55626f7b8899a3aebbc7d3e0dbd0c0b3a79a8d807467544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbeb3a9968a7d706357505d6a7683909da9b6bfbfbfbfbfbfbeb2a5988b7f7265584c3f3225190c000000000009141f2b3744505b65727f8c99a3aebac7d3dbcfc5b7ab9f95887c6f62554b4035291d110400000000000000000000000000000000000000101d2a3643505d6976828a8a8a8a8a8a8a8a8a8a8a8a8a9196a1acb9c5d2d8cbbfb2a69b908b8a8a8a8a8a8a8a8a8a8a8a8a887c6f6255483c2f22150900000000000000000613202d394653606c7985929facb8c5d2dacfc5bbb3adaba2a2acafb5bdc7d1dcd2c2b5a89b8f827568564d42362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000a1623303d495663707c8999a4afbbc7d4e0d9ccc0b3a6998d8073665a4d53606d7986929facb9c5d2dfdcd0c3b6a99d908376665c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2ada197877a6e6154505d6a7683909da9b2b2b2b2b2b2b2b2b2a5988b7f7265584c3f3225190c0000000000030f1b27333f4953616d7a86929facb9c3ced9d3c7bcb1a79a8d8174675d5145392c20150a00000000000000000000000000000000000000101d2a3643505d697683909797979797979797979797979ea1a8b2bdc9d5dbcfc3b7aca29b97979797979797979797979795887c6f6255483c2f22150900000000000000000915222f3c4855626f7b8898a2aebac6d3d5c9beb3a9a19e96969fa3abb5c0cbd7d1c4b8ab9e918478695e52463a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000000000c1926333f4c5966727f8c99abb5c0ccd7e3d7cbc0b5ab978a7e7164574b515c667784909daab7c3d0dddfd2c5b9ac9f9286796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69e918578695e52505d6a7683909da6a6a6a6a6a6a6a6a6a6a5988b7f7265584c3f3225190c0000000000000b17222d3846525e6875818e9ba7b1bcc8d4d8cdc2b8ab9f92857a6d6053473d32271b0f01000000000000000000000000000000000000101d2a3643505d697683909ca4a4a4a4a4a4a4a4a4a4a4abacb2bac4cedadfd4c8beb4aca6a4a4a4a4a4a4a4a4a4a4a4a295887b6f6255483c2f22150900000000000000000b1825323e4b5865717e8b98aab4bfcad6d2c6b9ada1979289899299a3afbbc7d4d2c5b9ada196877a6e6154473b2e211406000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000005111e2a36424d566875828f9ba8b5c2d2dde0d3c7bbafa399887b6f6255484b546875818e9ba8b4c1cedbe0d3c7baaea399897c6f6256493c2f2316080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79869299999999999999999999999999999999999999999999998f827569564d505d6a768390999999999999999999999999988b7f7265584c3f3225190c00000000000006111b2a36414c5663707c8995a0acb8c6d0dbd3c6baaea2988b7e7165584e43372b1e1308000000000000000000000000000000000000101d2a3643505d697683909ca9b1b1b1b1b1b1b1b1b1b1b7b9bdc4ccd6e0e5dad0c6beb7b2b1b1b1b1b1b1b1b1b1b1aea295887b6f6255483c2f2215090000000000000004101d2935404b556774818e9aa7b4c1d0dbd1c5b8ab9e92857d7d87929facb9c5d2d5c9bdb2a8978a7d7064574a3d2d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000714202d3a46525e697884919eabb8c4d1dedfd2c5b9ac9f9286796d6053464c5966727f8c99a5b2bfd0dbe3d7cbbfb4ab988b7e7265584b3f2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c807366594d505d6a76838c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7f7265584c3f3225190c000000000000000d1925303a4854606b7784919daab4bfcad6d6cabeb4aa9d9083776a6054473a2f24190d010000000000000000000000000000000000101d2a3643505d697683909ca9b6bdbdbdbdbdbdbdbdbdc4c5c9ced6dee8ece2d8d0c8c3bfbebdbdbdbdbdbdbdbdbbaea295887b6f6255483c2f2215090000000000000006131f2c3945515d677783909daab7c3d0dccfc2b6a99c8f83767784919eaab7c4d1dacfc0b3a6998d807366544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000814212e3b4754616e7a8796a1adb9c5d2dfddd0c3b7aa9d908477665c51454a5763707d8a96aab3becad6e2dcd1c1b4a79b8e817468564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6255484b5864717e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c6f6255493c2f2216090000000000000008131e2c38444f5965727f8b98a2aebac7d3dbd0c5b8aca095897c6f62564c4135291d11040000000000000000000000000000000000101d2a3643505d697683909ca9b6c3cacacacacacacacad1d2d5dae0e8f0f4eae2dad4cfcbcacacacacacacacac8bbaea295887b6f6255483c2f221509000000000000000714202d3a4753606d7a86929facb9c5d2dacdc0b4a79a8d817475828f9ba8b5c2cedbcfc2b6a99c8f8376665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000000a1724313d4a5764707d8a97a8b2bdc9d5e1dbcec1b4a89b8e817568544b404854616e7b8798a2aebac6d3dfddd0c4b7aa9d918477685d5245392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323e4b57636d72737373737373737373737373737373737373737373737373736f6a5f53474956626c717373737373737373737373737373736f6a6054473b2e2215080000000000000002101b27323d4754606d7a86929facb8c3cdd9d4c8bcb1a79b8e8174685d5245392c20160b0000000000000000000000000000000000101d2a3643505d697683909ca9b6c3cfd7d7d7d7d7d7d7dedee1e5ebf2fafcf4ece5dfdbd8d7d7d7d7d7d7d7d5c8bbaea295887b6f6255483c2f22150900000000000000091623303c4956636f7c8999a3afbbc7d3d8cbbeb2a5988b7f7273808c99a6b3bfd1dcd2c5b8ab9f9285796c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000000030f1b27333f49536673808d99a6b3c0cfdae5d8ccbfb2a5998c7f7266594c3f46535e697885929fabb8c5d2dedfd2c6b9ac9f93867a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222f3a46515b636666666666666666666666666666666666666666666666666666625f584e4345505a62646666666666666666666666666666666260584e43372b1f130600000000000000000b16202c3945525d6874818e9ba7b1bcc8d4d9cdc3b8ac9f92867a6d6054473d32271b100200000000000000000000000000000000101d2a3643505d697683909ca9b6c3ccccccccccccccccd1d2d5dae1e8f1f5ece3dcd5d1ceccccccccccccccccc8bbaea295887b6f6255483c2f221509000000000000000c1926323f4c5965727f8c98abb5c0cbd7d6cabfb4aa96897d70717e8a97abb5c0cbd7d3c6baaea298887b6e6255483b2f2215070000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000005121f2b3744505b6576838f9ca9b6c2cfdce2d6cabeb3aa968a7d7063574a3d424d57697683909ca9b6c3cfdce0d4c8bbafa49a897d7063564a3d3023170900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f495157595959595959595959595959595959595959595959595959595955534e463c3e4850565859595959595959595959595959595955544e463c32271b0f03000000000000000004111d2935414c56626f7c8995a0acb8c5d0dbd3c7baaea2988b7f7265594f44382c1e130800000000000000000000000000000000101d2a3643505d697683909ca9b6bfbfbfbfbfbfbfbfbfc4c6c9cfd6dfe8eee3dad2cac5c1c0bfbfbfbfbfbfbfbfbbaea295887b6f6255483c2f22150900000000000005111d2a36414c566875828e9ba8b5c1d1dcd3c6baaea298877b6e6f7c8899a3afbbc7d4d6cabeb3aa978b7e7164584b3e2f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000613202d394653606c7985929fabb8c5d2dedfd3c6baaea298877b6e6154483b414e5a6774818d9aa7b4c0cddae4d8ccc0b6ac998c7f7266594c3f30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4847433c34363e45494b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4947433c342b20150a000000000000000000010d19242f3a4754606a7783909daab4becad6d6cabfb4aa9d9184776b6054483a3025190d00000000000000000000000000000000101d2a3643505d697683909ca9b3b3b3b3b3b3b3b3b3b3b8b9bec4cdd6e1e7dcd2c8c0b9b5b3b3b3b3b3b3b3b3b3b3aea295887b6f6255483c2f2215090000000000000713202d3946525e687884919eabb7c4d1ded2c5b8ac9f9285796c6d7986929facb9c5d2dbd0c0b4a79a8d817467554b4034291c100400000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000815222f3b4855626e7b8898a2aebac6d3dfded2c5b8ab9f928578695e53463a3f4b5865727e8b98a5b1becfdae5ddd2c2b5a89b8f827568574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353a3e3f404040404040404040404040404040404040404040404040403c3a37312a2d34393d3e4040404040404040404040404040403c3b37322b22190f040000000000000000000008131e2b37434e5865727e8b98a2aebac6d3dbd0c6b8aca095897c7063564c41362a1b1106000000000000000000000000000000101d2a3643505d697683909ca6a6a6a6a6a6a6a6a6a6a6abadb3bbc4cfdae1d5cac0b6aea8a6a6a6a6a6a6a6a6a6a6a6a295887b6f6255483c2f2215090000000000000714212e3a4754616d7a8796a1acb9c5d2ddd0c3b6aa9d90837765677784919daab7c4d0ddd0c3b6aa9d908377675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000000000b1825313e4b5864717e8b97aab3becad6e2dccfc3b6a99c90837669574d42363c4956636f7c8996a8b2bdc9d5e1ded1c4b8ab9e918578695e52463a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2f3233333333333333333333333333333333333333333333333333332f2e2b262022292d30313333333333333333333333333333332f2e2b27201910070000000000000000000000010f1b27323d4753606d7a85929fabb8c2cdd8d4c8bcb1a79b8e8175685e5246382d22170b000000000000000000000000000000101d2a3643505d697683909999999999999999999999999ea1a9b3bec9d5ddd1c5b9aea49c99999999999999999999999995887b6f6255483c2f2215090000000000000a1724303d4a5763707d8a96a8b2bdc9d5dbcec1b4a89b8e8175686875828f9ba8b5c2cedbd2c5b9ac9f9286796d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000004101c2834404b556774818d9aa7b4c0d0dbe6dacdc0b4a79a8d8174675a4e41313a4754606d7a8796a1adb9c5d2dfdfd2c6b9ada197877b6e6154483b2e21150600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12181e2225262626262626262626262626262626262626262626262626262622211f1b15171d21242526262626262626262626262626262622221f1b150f07000000000000000000000000000a16202c3945515d6774818d9aa7b1bcc7d4d9cec3b9ac9f92867a6d6153493f33271b0f030000000000000000000000000000101d2a3643505d6976838c8c8c8c8c8c8c8c8c8c8c8c8c9197a1adb9c6d2dacec1b5a89c928d8c8c8c8c8c8c8c8c8c8c8c8c887c6f6255483c2f2215090000000000000d1a2633404d596673808c99a6b3bfcedad9ccbfb2a6998c7f73666673808c99a6b3bfd1dcd3c7bbaea399897c6f6256493c2f23160800000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000006131f2c3845515c677783909daab6c3d0dde4d8cbbeb1a5988b7e7265584b3f323945525d687884919eabb8c4d1dee1d5c9beb2a9978a7d7064574a3d2d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191919191919191919191919191919191919191919191515120f0a0c111517181919191919191919191919191919191615130f0a04000000000000000000000000000004111d2935404b55626f7c88959fabb8c5cfdbd3c7baaea3998c7f72655b5044372b1f140900000000000000000000000000000b1825323e4b5865717e8080808080808080808080808085919eabb8c4d1d9ccc0b3a6998d80808080808080808080808080807a6d6154473a2e211407000000000006121e2b37424d576976828f9ca9b5c2cfdcd7cbc0b5ab978a7d716464717e8a97abb5c0cbd7d7cbbfb5ab988b7f7265584c3f3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000713202d3a4653606d7986929facb9c5d2dfe1d5c9bdb2a896897c6f6356493c3035414c566976828f9ca9b5c2cfdce6dacfc0b3a6998d807366544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d09080603000005080a0b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0908060300000000000000000000000000000000010d18242f3a47535f6a7683909da9b3becad6d7cbbfb4ab9e9184786c6053463b30251a0e00000000000000000000000000000b1724313d4a56626c717373737373737373737373737783909daab7c3d0d3c6b9ada0938679737373737373737373737373736d685e5246392d20130700000000000814212d3a47535f697885929fabb8c5d2ded4c7bbafa399887b6e62626f7b8899a3afbbc7d4dcd1c1b4a89b8e817568564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000916232f3c4956626f7c8999a3aebac7d3e0dfd2c5b9ada196877a6d6054473a2d30404d5a6773808d9aa6b3c0d1dce8dccfc2b6a99c8f8376665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2b37434e5864717e8b97a2adb9c6d2dcd1c6b9aca096897d7063574d42362a1c1106000000000000000000000000000915212e3a45505a626566666666666666666666666a7784909daab7c3d0d3c6b9ada093867a6d666666666666666666666666615e564c41362a1e110500000000000815222e3b4855616e7b8897a2adbac6d3dfd2c5b9ac9f9286796d60606d7986929facb9c5d2ddd1c4b7aa9e918477685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000000000c1925323f4c5865727f8b98abb4bfcbd7e3ded1c4b8ab9e918478685d5245392c313e4b5864717e8b97abb5c0cbd7e3ded2c5b8ab9f9285796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607080808080807060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b26313c4753606d7985929eabb8c2cdd8d5c9bdb2a89b8f8275695e5246382e23170b0000000000000000000000000005111d29343f48505658595959595959595959595d6a7784909daab7c3d0d3c6b9ada093867a6d60595959595959595959595954524c443a3025190d0100000000000b1824313e4b5764717e8a97a9b3becad6ddd0c4b7aa9d918477665c5c677784919daab7c4d0ddd2c5b9aca096877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000004111d2935414c566875818e9ba8b4c1d1dce7dccfc2b5a99c8f827669564c4135292f3c4955626f7c8899a3afbbc7d3e0dfd3c6baaea298887b6f6255483c2f2215070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040707070d11131414151515141413100c070b08070502000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa6b0bbc7d3d9cec4b9ac9f92877b6e61544a3f34281c1003000000000000000000000000010c18222d363f454a4b4d4d4d4d4d4d4d4d4d515d6a7784909daab7c3d0d3c6b9ada093867a6d60534d4d4d4d4d4d4d4d4d4d4746413a32291e1308000000000004101c2834404b546774808d9aa7b3c0cfdbdbcec2b5a89b8f82756854556875828f9ba8b5c2cedbd5c9bdb2a8968a7d7063574a3d30241709000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000713202c3945525d687784919eaab7c4d1dde6d9cdc0b3a69a8d8073675a4d4030242d3a4653606d7986929facb9c5d2dfe2d6cabeb4aa978b7e7164584b3e2f23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11131417181d20212122222221201f1d181a181414110e0906020000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55626e7b88949fabb7c4cfdad4c7bbafa3998c8073665c5044382b1f14090000000000000000000000000006111b242d343a3d3e404040404040404044515d6a7784909daab7c3d0d3c6b9ada093867a6d6053474040404040404040403a3936302920170d02000000000006131f2c3845515c667683909da9b6c3d0dcd9ccc0b3a6998d8073665a596673808c99a6b3bfd1dcd9cebfb2a6998c7f7366594c4031261a0e020000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000714212d3a4754606d7a86939facb9c6d2dfe3d7cbc0b5ab978b7e7164584b3e31252c3845515c677784919daab7c4d0dde7dbd0c0b4a79a8d817467554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1013191d20212424292c2d2e2f2f2e2e2d2c2924272421201e1a14120e09030000000000000000000000000000000000000000000000000000000000000000000c18232f3947535f6976828f9ca9b3bec9d5d7cbc0b5ab9e9184786d6053463b31261a0e000000000000000000000000000009121b22292e3132333333333333333744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a33333333333333332e2d2a251e170e050000000000000713202d3a4653606d7986929facb9c5d2dfd7cabeb1a4978b7e7164585764717e8a97abb5c0cbd7dbcfc2b5a89c8f827569574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000a1723303d4a5663707d899aa4afbbc8d4e0e0d4c7bbafa399887c6f6255493c2f222834404b556875828e9ba8b5c1cedbe8ddd0c3b6aa9d908377675c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f161c1e24292c2d312f35393a3b3b3b3b3b3a38352f34312e2d2a25211e1a150f0a040000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717e8a97a1adb9c7d2dcd1c7b9ada1968a7d7064574d42362a1d120700000000000000000000000000000911181d2124252626262626262a3744515d6a7784909daab7c3d0d3c6b9ada093867a6d6053473a2d2626262626262621201e19130d05000000000000000916232f3c4956626f7c8998a3aebac7d3e0d5c9beb2a995897c6f625655626f7b8899a3afbbc7d3ded1c5b8ab9e928578695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000000000d192633404c5966737f8c99acb6c0ccd8e4dfd2c5b9ac9f9286796d6053463a2d20232e404c5966737f8c99a6b2bfd0dbe7dfd2c5b9ac9f9286796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151b21272c3035393a3e41414547474848484747454042403e3b3a36302e2b26201b160d08020000000000000000000000000000000000000000000000000000000000010e1a26313c4653606d7985919eabb5c0ccd7d5c9bdb2a89c8f8276695f5346392e23180c000000000000000000000000000000060c111517181a1a1a1a1a1e2a3744515d6a7784909daab7c3c6c6c6b9ada093867a6d6053473a2d201a1a1a1a1a1a1413110d080200000000000000000c1825323f4b5865727e8b98aab4bfcbd7dfd2c6b9ada197877a6d605453606d7986929facb9c5d2dfd2c6b9ada197887b6e6155483b2e2215060000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f2215080000000000000000000005121e2a36424d576975828f9ca8b5c2d2dde8ddd0c4b7aa9d918477675c5145382c1f24313d4a5764707d8a97aab4bfcad6e2e0d3c7bbaea399897c6f6256493c2f231608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111720262b33383a4145474a4e4b5154545555555453514b4f4d4b4746423b3a37312c272119140d05000000000000000000000000000000000000000000000000000000000009151f2c3844515c6673808d99a4afbbc7d4dacfc4b9ac9f93877b6e61544b4034281c10040000000000000000000000000000000105090b0b0d0d0d0d111e2a3744515d6a7784909daab7b9b9b9b9b9ada093867a6d6053473a2d20140d0d0d0d0d0707050100000000000000000004111d2935414c566874818e9ba7b4c1d1dcded1c4b8ab9e918578685d52515c667784919daab7c4d0ddd5c9beb3a9978a7e7164574b3e2e23170c0000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000714212d3a46535e697885919eabb8c4d1dee8dbcec1b5a89b8e827568554b4034281c222e3b4855616e7b8898a2aebac6d3dfe3d7cbbfb5ab988b7f7265584c3f3024190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b141c222832373d44484c5254575a555d606162626161605d555c5a5754524d4847423c38322a251e170e070000000000000000000000000000000000000000000000000000000004101c2834404a54616e7b87939facb9c4cedad4c8bbafa49a8d8073665c5145382c1f1509000000000000000000000000000000000000000000000004111e2a3744515d6a7784909daaacacacacacacaca093867a6d6053473a2d20140700000000000000000000000000000000000613202c3945525d687784919daab7c4d0dddccfc2b6a99c8f837669564c4b546875828e9ba8b5c1cedbdacfc0b3a79a8d807467544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000815212e3b4854616e7b8797a1adb9c6d2dfe5d9ccbfb2a6998c7f7366594c402e2318202d394653606c7985929facb8c5d2dfe7dcd1c1b4a89b8e817568564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d262d333c43474f54565d6064676a676d6e6e6e6e6e6d676b696764615e5755534e48433d36302920191108000000000000000000000000000000000000000000000000000000000c18232e3946535e6975828f9ca8b2bdc9d5d8ccc0b6ac9e9285796d6053463c31261a0f010000000000000000000000000000000000000000000004111e2a3744515d6a7784909da0a0a0a0a0a0a0a0a093867a6d6053473a2d20140700000000000000000000000000000000000714212d3a4754606d7a86939facb9c6d2dfdacdc0b4a79a8d8174675a4e4d596673808c99a6b3bfd1dcdccfc3b6a99c908376665c5044382c1f120600000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000000b1724313e4a5764717d8a97a9b3bec9d5e1e2d6cabfb4aa978a7d7064574a3d3124171f2b3744505b657683909da9b6c3d0dce5ddd1c4b7aa9e918477685d5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161f282f383f444e53596063686d717476787a7a7b7b7b7a7a79777573716e6966625f57544f46413b322b231a110800000000000000000000000000000000000000000000000000000007121c2a36424d5763707d8a96a1acb9c7d1dcd2c7b9ada1978a7e7164584e43372b1d12070000000000000000000000000000000000000000000004111e2a3744515d6a7784909393939393939393939393867a6d6053473a2d20140700000000000000000000000000000000000a1723303d4a5663707d899aa4afbbc8d4e0d8cbbeb2a5988b7f7265584c4a5764717d8a97abb5c0cbd7dfd2c5b8ac9f9285796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2dfe0d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f221508000000000000000000030f1c28333f4a546773808d9aa6b3c0cfdad9d9d3c6baaea298887b6e6155483b2e22151b27333f49536774818e9aa7b4c1cdd9d9d9d2c5b9aca096877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c161f28313a424a50585f626b70757a7d81838587878888888786858482807e7b77736e6a636059524c443d352c231a11070000000000000000000000000000000000000000000000000000000e1a25313b4653606c7884919eabb5c0cbd7d5c9beb3a99c8f83766a5f5347392f24180c0000000000000000000000000000000000000000000004111e2a3744515d6a778386868686868686868686868686796d6053473a2d20140700000000000000000000000000000000000d192633404c5966737f8c99acb6c0ccd8e2d6cabeb4aa96897d7063564a4855626f7b8899a3afbbc7d3e0d3c7baaea298887c6f6255493c2f22160700000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5d2d9d9d3c6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9e1d4c8bbaea195887b6e6255483b2f22150800000000000000000006121f2b3844505b667683909ca9b6c3ccccccccccc5b8ac9f9285796c605346392d201317222d3f4c5865727f8b98a5b2becfccccccccc9bdb2a896897d7063564a3d30231709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e28313a434b545b606a6f767d82868a8d90929794959594949892918f8d8a8784807b766f6b615e564f473e362c23190f05000000000000000000000000000000000000000000000000000009141f2b3844505b66737f8c99a3afbbc7d3dacfc5b7ab9f94887b6e62554b4035291d1004000000000000000000000000000000000000000000000713202d3a4653606d787979797979797979797979797976675d5145392c2013060000000000000000000000000000000005121e2a36424d576875828f9ba8b5c2d2dddfd3c6baaea298877b6e6154474653606d7986929facb9c5d2dfd6cabfb4aa988b7e7265584b3f2f24180d01000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9c5ccccccccc6b9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd9ded4c8bbaea195887b6e6255483b2f2215080000000000000000000613202d394653606c7985929facb8bfbfbfbfbfbfbfb6a99d908376655b5044372b1f121623303d495663707c8996a9b2bebfbfbfbfbfbfbfb2a6998c7f7366594c4031251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303a434c555d666c737c82898e92999a9d9ea2a9a1a1a1aaa29f9e9c9a9795918c87827c756e68605950483e352b21170d0300000000000000000000000000000000000000000000000000030f1c28333f4a54616e7b86929facb9c3ced9d3c7bbb0a69a8d8074675d5145382c1f150a0000000000000000000000000000000000000000000006121f2b3844505c666d6d6d6d6d6d6d6d6d6d6d6d6d6d665d554b4035291d1104000000000000000000000000000000000714212d3a46535e697885919eabb8c4d1d2d2d2c5b8ab9f928578695e524645515c667784919daab7c4d0d2dbd0c1b4a79b8e817468554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb9bfbfbfbfbfbfb9ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfccd1d1d1c8bbaea195887b6e6255483b2f2215080000000000000000000915222f3c4855626f7b8898a2aeb2b2b2b2b2b2b2b2b2a79a8e81746753493f33271b0f14212e3a4754616d7a8797a1adb2b2b2b2b2b2b2b2b2a89c8f827569574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d17232e38424c565d676d7880878f949b9fa3aba9abadb3aeaeaeb4aeacaaa8a6a8a09d9a938f89817a706b615a50473d33291f140900000000000000000000000000000000000000000000000000000b17222d3846525e6875828f9ba8b2bdc8d4d8cdc2b8ab9f9285796d6053473c32261b0f0100000000000000000000000000000000000000000003101c28343f4a545c60606060606060606060606060605c544b433a2f24180d01000000000000000000000000000000000815212e3b4854616e7b8797a1adb9c6c6c6c6c6c3b6a99d9083766a574d42404b546875828e9ba8b5c1c6c6c6c6c4b7aa9d918477675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facb2b2b2b2b2b2b2b2ada093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3bfc5c5c5c5c5bbaea195887b6e6255483b2f2215080000000000000000000b1825323e4b5865717e8b98aaa6a6a6a6a6a6a6a6a6a6a5988b7f7265584c3f2d22170b13202d3946525e687885919ea6a6a6a6a6a6a6a6a6a6a69e928578695e53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f28343f4a545d686d79828c93999fa6acaeb5b6b8b9bebbbbbbbfbab8b7b5b3b1acaca49f9c938e857d706c61594f453b31251a0e050000000000000000000000000000000000000000000000000006111c2a36414d5663707d8996a0acb9c6d1dcd3c6baada2978b7e7164584e43372b1d1307000000000000000000000000000000000000000000000b17232e38424a505353535353535353535353535353504a423a31281d130700000000000000000000000000000000000b1724313e4a5764717d8a97a9b3beb9b9b9b9b9b9b4a79b8e8174685b4e41404d596673808c99a6b3b9b9b9b9b9b9b9ac9f93867a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929fa6a6a6a6a6a6a6a6a6a6a093867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6b3b8b8b8b8b8b8b8aea195887b6e6255483b2f2215080000000000000000010e1b2834414e5b6774818e9999999999999999999999999996897c706356493d30231606111d2935414c566976828f9999999999999999999999999997877b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313944505c666d7a838f949fa4abb0b9bbbfc3c5c6cacfc8d0cac6c5c4c2c0bdb8b6afaca59e9791877e706b60574d42362a21160b00000000000000000000000000000000000000000000000000000e1925303b4653606c7884919eaab4bfcbd7d6cabeb3a99d9083766a5f53473a2f24180d0100000000000000000000000000000000000000000006111c2630383f444646464646464646464646464646443f3830281f160c0100000000000000000000000000000000030f1c28333f4a546773808d9aa6acacacacacacacacaca5998c7f7266594c3f3e4a5764717d8a97abb5acacacacacacacafa499897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79869299999999999999999999999993867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c99a6abababababababababa195887b6e6255483b2f221508000000000000000004111d2a3744505d6a77838c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877a6d6154473a2e2114070d192530404d5a6773808c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f39434f59606d78828f959fa6afb5bdc2c7cbd1d1d2d6dbd4dbd6d3d2d1cfcec8c7c0bbb9afa9a19992877d70695e53463d33271c10030000000000000000000000000000000000000000000000000008141f2b3744505b65727f8c98a3aebac7d3dbd0c5b8ab9f95887c6f62554b4135291d1104000000000000000000000000000000000000000000000a141e262e34383a3a3a3a3a3a3a3a3a3a3a3a3a3a38342e261e160d04000000000000000000000000000000000006121f2b3844505b667683909c9f9f9f9f9f9f9f9f9f9f9f978a7d7064574a3d3c4855626f7b8899a39f9f9f9f9f9f9f9f9f9f998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c867a6d6053473a2d20140700000000000000000000000000000000000000000d1a2633404d596673808c999e9e9e9e9e9e9e9e9e9e9e95887b6e6255483b2f2215080000000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f72685e5246392d2013070816222f3c4955626f7c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616b74808d949fa7b0bbc0c7d0d3d7dcd9d5d2d1cfcfd0d2d4d7ddd9d4d2ccc8c1bbb3aba39992857b6e61594f44382c20150900000000000000000000000000000000000000000000000000030f1b27333f4953616d7a86929facb9c3ced9d4c8bcb1a79a8e8174675d5145392c20160a00000000000000000000000000000000000000000000020c141c23282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28231c150c040000000000000000000000000000000000000613202d394653606c79859293939393939393939393939399887b6e6255483b3a4653606d7986929393939393939393939393938f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f786d6053463a2d20130700000000000000000000000000000000000000000d1a2633404d596673808c92929292929292929292929292887b6e6255483b2f2215080000000000000000000c1825323e4b57636d72737373737373737373737373737373726d63564c4135291d11050815222e3b4754606a6f737373737373737373737373737373736f6b6054483b2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d67707d8a929da6b0b9c2ccd2d9dcd7d4cec9c5c4c3c2c3c6c7ccd2d9e2ddd8d4cdc4bdb4aba1978f82756b6054483c31261a0e02000000000000000000000000000000000000000000000000000b17222d3846525e6875818e9ba7b1bcc8d4d8cdc2b8ac9f92857a6d6054473d32271b0f0200000000000000000000000000000000000000000000020a11171c1f20202020202020202020202020201f1c17110a03000000000000000000000000000000000000000915222f3c4855626f7c86868686868686868686868686868687796d6053463a3844515c667783868686868686868686868686868684786b5e5245382b1f1200000000000000000000000000000000000000000000000000000000000000000000000c1825323e4b57636d727373737373737373737373737373736d665c5144382c1f120600000000000000000000000000000000000000000c1926333f4c5966727f8585858585858585858585858585857b6e6155483b2e2215080000000000000000000a16222e3a46515b636666666666666666666666666666666665635b51443a3025190d0106131f2b37434e586062666666666666666666666666666666666360594f44382c1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606d7984919ea4aeb8c2cbd7ddd9d1cbc7c4bdb9b7b6b5b6b9bbc0c7d0d2dbe4dfd6cfc6bdb3a99e94897d7063574d42372b1e12060000000000000000000000000000000000000000000000000006111b2935414c56636f7c8995a0acb8c6d0dbd3c6baaea2988b7e7265594f43382c1e1308000000000000000000000000000000000000000000000000060b1012131313131313131313131313131312100c060000000000000000000000000000000000000000000815212e3a47535f6a767979797979797979797979797979797975665c51443834404a5467717779797979797979797979797979797872685c5043372a1e1100000000000000000000000000000000000000000000000000000000000000000000000a16222f3a46515b6366666666666666666666666666666666605c544a4034281c100400000000000000000000000000000000000000000c1825323e4b57636d727878787878787878787878787878786e695f53463a2d21140700000000000000000006121e2a353f49515759595959595959595959595959595959595751493f32281e130800030f1b27323c464e54555959595959595959595959595959595956544f473d32271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d6873808c96a1acb6c0cad4ddd8cfc7c0bbb9b2acaaa9a8aaacafb5bdc0c9d1dae3e1d8cfc5bbb0a69c8f8276695f53473a2e21140600000000000000000000000000000000000000000000000000000d1925303a4854606b7783909daab4bfcad6d6cabfb4aa9d9083776b6054483a3024190d0000000000000000000000000000000000000000000000000000030607070707070707070707070707070603000000000000000000000000000000000000000000000006121f2b37434e585f626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a5c544a40342e3942555f676a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6860564b4034281b0f000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f4951575959595959595959595959595959595953514a42392e23180c0000000000000000000000000000000000000000000a16222f3b46515b63666b6b6b6b6b6b6b6b6b6b6b6b6b6b6b615f574d42372b1e1205000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a463f372d20160c0200000a15202b343c4347494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4948443d352b21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4953606d7a85929fa8b2bdc8d2dcd8cec6bdb5afaca8a09e9c9c9d9fa4abafb7bfc8d1dde7e1d7cdc1b7ab9f94887b6e6255483b2e23170c000000000000000000000000000000000000000000000000000008131e2c38434f5965727f8b98a2aebac6d3dbd0c5b8aca095897c6f63564c4135291b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26313c464e53556060606060606060606060606060605f5e514a42392e2730444d555b5e60606060606060606060606060605e5c564e453a2f23170b0000000000000000000000000000000000000000000000000000000000000000000000020d18232e373f464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4644403930271c120700000000000000000000000000000000000000000006121e2a353f495157595f5f5f5f5f5f5f5f5f5f5f5f5f5f5f55534d453c31261a0e020000000000000000000007111c252e353a3e3f4040404040404040404040404040403f3e3a352d251c0e04000000040e19222b32373b3c404040404040404040404040404040403c3b38322b23190f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b65727f8c97a2adbac4cedadcd0c6bcb4aba39f9a9691908f9093999da5adb6bfcbd5dfe9dfd3c7bbb0a6998c7f7266544a3f34281c100300000000000000000000000000000000000000000000000000020f1b27323d4754606d7a86929facb8c3cdd8d4c8bcb1a79b8e8174685d5246382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c434748535353535353535353535353535353534644403930271e323b444a4f51535353535353535353535353535352504b453c33281e120700000000000000000000000000000000000000000000000000000000000000000000000007121c252e353a3e3f4040404040404040404040404040403a38342e271e150b00000000000000000000000000000000000000000000020d18232e373f464b4c5252525252525252525252525252524846423c332a1f14090000000000000000000000000a131c232a2e323333333333333333333333333333333332312e2a231c130a000000000007101920272b2e2f33333333333333333333333333333333302f2c272119110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7884919ea9b3beccd6e0d6cbbfb4aaa399928d8884838283878e929ca3adb9c3cdd9e4e3d8ccc2b6a99c908376665c5044382c1f120600000000000000000000000000000000000000000000000000000a16202c3945515d6774818e9aa7b1bcc8d4d9cec3b8ac9f92867a6d6153493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222a31373a3c464646464646464646464646464646463a38342e271e202932393f434446464646464646464646464646464543403a332a21170c01000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2f32333333333333333333333333333333332d2c28231c150c03000000000000000000000000000000000000000000000007121c252e353b3e3f4545454545454545454545454545453b3a37312a21180e03000000000000000000000000010a11181e2225262626262626262626262626262626262625221e18110a01000000000000070e151b1f22222626262626262626262626262626262623221f1b160f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d8996a0acbbc5d0dee0d3c7baaea3989287807b777675777a818c919ca7b1bcc8d4e0ebdfd2c5b8ac9f9285796d6053463a2d201307000000000000000000000000000000000000000000000000000004111d2935414c55626f7c88959fabb8c5d0dbd3c7baaea3988c7f72655b5044372b1f14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101820262b2e2f393939393939393939393939393939392d2c28231c151720272e33363739393939393939393939393939393837342f2821180f050000000000000000000000000000000000000000000000000000000000000000000000000000010a12181e222526262626262626262626262626262626201f1c18120b03000000000000000000000000000000000000000000000000000a131c232a2f32333838383838383838383838383838382e2d2b261f180f06000000000000000000000000000000070d12161819191919191919191919191919191919191816120d07000000000000000000040a0f131516191919191919191919191919191919191615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586774818e9aa8b2bdcdd7e1d4c8bcb1a79f92867d746e696969686e747f8c95a0acb8c4d1deeae0d3c7baaea298887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000010d19242f3a4754606a7783909da9b3becad6d6cbbfb4aa9d9184786c6053463b3025190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151b1f21222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c201f1c18120b0e161d22272a2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2a28231e170f060000000000000000000000000000000000000000000000000000000000000000000000000000000000070d121618191919191919191919191919191919191312100c07000000000000000000000000000000000000000000000000000000010a12181e2225262c2c2c2c2c2c2c2c2c2c2c2c2c2c2c22211e1a140e06000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0c090601000000000000000000000000030608090d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0909070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7884919eabb7c4cededed1c5b8aca0958b7e716b615f57565e616c7883909daab6c3d0dde9e2d6cabfb4aa968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000000000008131e2b37434e5865717e8b97a2adbac6d3dcd0c6b8aca096897d7063564c41362a1c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f121515202020202020202020202020202020201312100c0700040b11171b1d1e20202020202020202020202020201f1e1b17120c050000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d07060400000000000000000000000000000000000000000000000000000000000000070d121618191f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8896a1adb9c5d2dfddd0c3b7aa9d9083786c6059534d4c525b65727e8b98a5b1becbd8e4e7dbd0beb1a5988b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000000010f1b27323c4753606d7985929fabb8c2cdd8d4c8bdb2a89b8e8275685e5246382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060809131313131313131313131313131313130706040000000000060b0e1011131313131313131313131313131312110f0b070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c1212121212121212121212121212120807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a8b2bdc9d5e1d6cabfb4aa988c7f72665b504642414953626f7b8895a2aebbc8d5e1e5d8cbbfb2a5988c7f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000a151f2c3945515d6774808d9aa6b0bcc7d3d5cec3b9ac9f92867a6e61544a3f33281c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a546874818e9ba7b4c1cfdae0d3c7baaea298887b6e62544a3f373a4754616d7a8794a0adbac7d3e0e5d9ccbfb2a6998c7f7366594c403326190d0000000000000000000000000000000000000000000000000000000004101d2935404b55626f7b88949fabb7c5cfc9c6c4bbaea3998c7f73665b5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c667784909daab7c3d0dddfd2c5b8ac9f9285796c6053463c3c3c4754616d7a8794a0adbac7d3e0e5d9ccbfb2a6998c7f7366594c403326190d00000000000000000000000000000000000000000000000000000000000c18242f3947535f6a7683909ca9b3bec5beb9b8b2acab9e9184786c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facb9c5d2dfddd0c3b7aa9d908477655b504a4948484953626e7b8895a1aebbc8d4e1e5d8ccbfb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000007121d2b37434e5864717e8a97a1adb9b8b3adaba8a09e99958a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8899a3afbbc7d4e0dccfc2b5a99c8f827669565856555555565b65717e8b97a4b1becad7e4e4d8cbbeb1a5988b7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000010f1a26313c4653606d7985929eacaeaca9a19e9a96918c88837d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996abb5c0cbd7e3dbcec2b5a89b8f82756968656362626263656c7883909da9b6c3d0dce9e4d8ccc0b6ac978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000a151f2c3845515c6773808d9aa4a29f9b97928d8984807b77706b6155483c2f2316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5b1bed1dce8dbcfc2b5a89c8f827b787472706f6f6f6f7277808d959fabb7c4d1ddeae0d4c8bbafa49a897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000000000004101c2834404b55616e7b87939c98928e8a85807c77736e6a6361594f44382c2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a6b2bfccd9e5dcd0c3b7aa9e948f8784817f7d7c7b7b7c7f838d929ca7b1bcc7d3e0ecdfd2c6b9ac9f93867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000c18232e3946535f6976828f8f8a85817d79746f6a66625f57554f473e33281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d9aa7b3c0cddae6dfd3c7bbb0a69e9c96918e8b89888888898b90959ca4aeb9c2cdd8e4eaddd0c4b7aa9d918477675d5145392c2013060000000000000000000000000000000000000000000000000000000000000007121d2b37424d5764717e86827e7a75706d6662605855534e48443e352c21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7e3d7ccc1b8b0aaa8a19e9b989695959596989d9fa7aeb6c0cbd4dee9e1d5c9beb3a99a8d817467554b4035291d110400000000000000000000000000000000000000000000000000000000000000000e1a26313c4653606d787a75716d6763605c54544e4847423c38332c231a1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9ba8b5c2cedbe8e9ded3cac1bbb7b2acaba7a5a3a2a2a2a2a5aaabb1b9c0c8d1dde6e4dbd2c6b9ada1978a7d7063574a3d2f24180d01000000000000000000000000000000000000000000000000000000000000000009141f2c3844505c666d6d6864605d5553504a47433d3a37312c28211a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca8b5c2cfdbe8efe5dcd3ccc7c4bdb9b7b4b2b0afaeaeafb2b6b8bcc3cbd1dae3e5dcd5c9beb3a99e9185796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c60615e5653514b46443f3838322e2b26201c161008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9ca9b5c2cfdce8f5eee5ded7d3cec9c5c4c1bebcbbbbbbbcbec3c4c8cdd4dde5e0d9d5c9c1b9ada1978c8073665c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000c17232e38424a505354524c4745403a38342e2b27211e1a15100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d293643505c6976838f9ca9b6c2cfdce9f5f7efe9e3e0dad5d2d1cecbc9c8c8c8c9cbd0d1d4d8e0dfd9d4cec9c0b7afa59e92857a6d60544b4034281c10040000000000000000000000000000000000000000000000000000000000000000000006111c2630383f44464746413a39352f2c28231c1b16120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9ca9b5c2cfdce8f5efe7dfd9d4d1d0cbcdd0d2d4d7dcd5d5d8dbdadcd7d4d2cec8c4bdb9aea59d938b7e71685d5242392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000a151e262e34383a3a3936302c29241f1c17110f0a060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca8b5c2cfdbe8f1e7ddd5cec8c5c3bec0c3c5c7cbd1cececececdd1cbc7c5c3bdb8b2aca49d938e81746c61564c4130271d1207000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d2e2d2a25201d1812100c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9ba8b5c1cedbe8eadfd5cbc3bcb8b7b1b3b6b9bbc0c0c1c2c1c1c0bfc0bbb9b6b2aca8a09e928d81786d605a50433a2f1e150b0000000000000000000000000000000000000000000000000000000000000000000000000000030a11171c1f2021201d1913100d070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2835414e5b6874818e9ba7b4c1cedae7e4d9cec3b9b1acaaa4a6a9acafb5b3b5b5b5b4b3b2b5afacaaa8a09d96918a80786d665c50483e31281e0c0300000000000000000000000000000000000000000000000000000000000000000000000000000000060c1012131413110d080401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9aa6b3c0cdd9e6e0d4c8bcb1a7a09d989a9d9fa3aba7a8a8a8a8a7a5aba39f9d9a96918b847d746d665c544a3f362d1f160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060707070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c98a5b2bfcbd8e5ded1c5b8aca095908b8d909299989a9b9b9b9b9a99979992908d89847e79706b605c544a42382e241b0d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1bdcfdae5ddd0c3b7aa9d90837e808386898b8d8e8f8e8e8d8c8b888683807c77716d676159504a423830261c1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a8b2bdc9d5e1ddd0c3b6aa9d90837773767a7c7f8082828281807f7e7c7a77736f6a65605c554f443f3830261e150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8796a1adb9c5d2dfded1c4b7ab9e91847869676d6f7274757575757472716f6d676762605853514b433e342e2e29221b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677884919eabb7c4d1dedfd2c5b9ada196877b6e61606365676868686867666462605d5556544e46454040423e3d3a342d241b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b556875828f9ba8b5c2cedae1d5c9bdb2a8978b7e71655b56585a5b5c5b5b5a59585553514b494746484a4b4d4f4b4a453f362d22180c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3f4c5865727f8b98a8b2bdc9d5e1dacfc3b7aa9d9083786c605b53504a4f4f4e4d4c4b4c4d4e4f4b51535556585a5c585650483f34291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000716222f3c4955626f7c8896a1acb9c5d2deded1c5b8aca0958c7f726d63605b54585757575758595a5b5c545c60616365666865625a50453a2e2115090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7884919eabb7c2cdd8e0d4c8bcb1a79f93887f76706c6666656464646465656667686a666d6e70717375716c62564a3d3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e586773808d9aa6b0bbc7d3e1d9cec3bbafa49a938b827d797573727170707171727374757778797b7d7e80827e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4855626f7c88949fabb7c2cfd9dfd8ccc0b6aca49f948f898582807e7e7d7d7e7e7f80818283858688898b8d8e8174675b4e4134281b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212e3b47535f6a76828f9ca6b0bdc7d1dcddd2c7beb6afa69f9c97918f8c8b8a8a8a8a8b8c8d8e8f9091939a9698998f8276695c4f433025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e5863707d8a949fabb5c0cbd7ddd9d0c7c0bbb0aba9a19e9b9998979797979898999a9b9d9e9fa4aca49d9184776a564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4855616b76828f99a3afbbc2cbd5ddd9d2ccc2bbb7b3adaba8a6a5a4a3a3a4a4a5a6a7a8aaabacafb6ac9f928579685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f59626f7c87929fa6b0b9c3cbd6dbddd8ccc7c4beb9b8b5b3b1b1b0b0b1b1b2b3b4b5b6b8b9bbbaaea298877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e47535f6a73808c949fa7b1b9c1cad0d7ddd8d3cfc9c6c4c2bfbebdbdbdbdbebfc0c1c2c3c4c6c8bfb4aa95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b37434e58606c78828f95a0a7b0babfc6ccd2d6dadad5d2d1cecccbcacacacacbcbcccdced0d1d2d0bdb0a4978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1b26313c44505b666d7a8390959ea6aeb4bbc0c7cacfd2d3d7dcd8d9d8d7d6d6d7dad6d2d1cfcfc9c6c4bfb2a5988c7f7265594c3f3226190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a152028333f4a545e686d7a838f949fa2aaafb5b9bec3c5c7cbd1cccccdcccccbcbcfcac6c5c2c0beb9b8b4b2a79a8d8074675a4d4134271a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b17222d38424c565e686d7a828c92989fa4abadb3b6b9babfbebfbfc0c0bfbfbebdbeb9b8b6b3b2adaba8a8a09b8f8275685c4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3a444c565e686d777f868e93999ea1a9a9acaeb4b1b2b3b3b3b2b2b1b0b3adaba9a6a9a19e9b9896918e83776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28323a444c565d656c727b81878d92979a9d9fa3aaa4a5a6a6a6a6a5a5a3a9a19e9c9a9797918e8b8884817e7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b162029323a434c535b60696e757b8085898d909298969899999a99999898969597928f8d8a8885817e7b7774706c6155493c3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e172029313a414950575e61696e74797d80838688898b8c8c8d8d8c8c8b8a88878583807e7b7875716e696764615a5044392d20140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f282f383f444d53575f61666d707476797b7d7e7f8080807f7f7e7d7b7a787673716e696865615f57575550473e33281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d161d262d333b42464d53545c606367666d6e707172737373737272706f6d67696764625f575855534d4a49443e352c22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b141b222731363b42464a505356545c60626365666667666665656362605d555a5755534d4b4846423d3c39332c231a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171f252a3136383f44464a4b515355565859595a5a595958575554514b4d4b4847423e3b3a3631302d28221a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b141a1f262a2e34383a3d404546484a4b4c4d4d4d4c4c4b4a48474541403e3b3a37312e2d2a2623201c1710080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e141a1c23282c2d2e34383a3b3d3e3f404040403f3f3d3c3a39352f312f2e2b2622211e1a1614100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e11171c1f2023282c2d2f303233333433333232302f2d2c29242422211e1a1514120e090804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c101213181c1f2022232526262727262625242221201d18181514120e0907050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070c101313151718191a1a1a19191817151413110d070808060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607080a0b0c0d0d0d0d0c0c0a0907060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m_StreamData: serializedVersion: 2 offset: 0 @@ -272,6 +272,21 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 + - m_Index: 30 + m_Metrics: + m_Width: 16.65625 + m_Height: 42.125 + m_HorizontalBearingX: 4.40625 + m_HorizontalBearingY: 42.125 + m_HorizontalAdvance: 25.375 + m_GlyphRect: + m_X: 301 + m_Y: 93 + m_Width: 18 + m_Height: 43 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 - m_Index: 41 m_Metrics: m_Width: 40.671875 @@ -332,6 +347,21 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 + - m_Index: 48 + m_Metrics: + m_Width: 35.1875 + m_Height: 60.484375 + m_HorizontalBearingX: 6.03125 + m_HorizontalBearingY: 60.484375 + m_HorizontalAdvance: 42.03125 + m_GlyphRect: + m_X: 301 + m_Y: 159 + m_Width: 36 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 - m_Index: 50 m_Metrics: m_Width: 51.390625 @@ -392,6 +422,21 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 + - m_Index: 58 + m_Metrics: + m_Width: 53.5625 + m_Height: 60.484375 + m_HorizontalBearingX: 0.984375 + m_HorizontalBearingY: 60.484375 + m_HorizontalAdvance: 55.53125 + m_GlyphRect: + m_X: 399 + m_Y: 158 + m_Width: 55 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 - m_Index: 67 m_Metrics: m_Width: 38.515625 @@ -437,6 +482,36 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 + - m_Index: 73 + m_Metrics: + m_Width: 41.3125 + m_Height: 47.34375 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 46.171875 + m_HorizontalAdvance: 46.171875 + m_GlyphRect: + m_X: 777 + m_Y: 10 + m_Width: 42 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 80 + m_Metrics: + m_Width: 15.671875 + m_Height: 61.921875 + m_HorizontalBearingX: 5.484375 + m_HorizontalBearingY: 61.921875 + m_HorizontalAdvance: 26.640625 + m_GlyphRect: + m_X: 356 + m_Y: 159 + m_Width: 17 + m_Height: 62 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 - m_Index: 87 m_Metrics: m_Width: 37.53125 @@ -452,6 +527,66 @@ MonoBehaviour: m_Scale: 1 m_AtlasIndex: 0 m_ClassDefinitionType: 0 + - m_Index: 88 + m_Metrics: + m_Width: 29.15625 + m_Height: 57.875 + m_HorizontalBearingX: 1.796875 + m_HorizontalBearingY: 56.703125 + m_HorizontalAdvance: 33.5625 + m_GlyphRect: + m_X: 520 + m_Y: 91 + m_Width: 30 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 90 + m_Metrics: + m_Width: 44.28125 + m_Height: 45 + m_HorizontalBearingX: 0.71875 + m_HorizontalBearingY: 45 + m_HorizontalAdvance: 45.8125 + m_GlyphRect: + m_X: 203 + m_Y: 176 + m_Width: 45 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 91 + m_Metrics: + m_Width: 66.609375 + m_Height: 45 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 45 + m_HorizontalAdvance: 70.109375 + m_GlyphRect: + m_X: 838 + m_Y: 10 + m_Width: 68 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 92 + m_Metrics: + m_Width: 42.5625 + m_Height: 45 + m_HorizontalBearingX: 0.8125 + m_HorizontalBearingY: 45 + m_HorizontalAdvance: 44.015625 + m_GlyphRect: + m_X: 925 + m_Y: 10 + m_Width: 44 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 - m_Index: 360 m_Metrics: m_Width: 62.640625 @@ -516,6 +651,10 @@ MonoBehaviour: m_Unicode: 57 m_GlyphIndex: 29 m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 30 + m_Scale: 1 - m_ElementType: 1 m_Unicode: 69 m_GlyphIndex: 41 @@ -532,6 +671,10 @@ MonoBehaviour: m_Unicode: 75 m_GlyphIndex: 47 m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 48 + m_Scale: 1 - m_ElementType: 1 m_Unicode: 78 m_GlyphIndex: 50 @@ -548,6 +691,10 @@ MonoBehaviour: m_Unicode: 84 m_GlyphIndex: 56 m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 58 + m_Scale: 1 - m_ElementType: 1 m_Unicode: 95 m_GlyphIndex: 67 @@ -560,10 +707,34 @@ MonoBehaviour: m_Unicode: 100 m_GlyphIndex: 72 m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 73 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 80 + m_Scale: 1 - m_ElementType: 1 m_Unicode: 115 m_GlyphIndex: 87 m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 88 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 90 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 91 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 92 + m_Scale: 1 - m_ElementType: 1 m_Unicode: 8230 m_GlyphIndex: 360 @@ -670,6 +841,42 @@ MonoBehaviour: m_Y: 0 m_Width: 65 m_Height: 80 + - m_X: 767 + m_Y: 0 + m_Width: 61 + m_Height: 68 + - m_X: 828 + m_Y: 0 + m_Width: 87 + m_Height: 64 + - m_X: 915 + m_Y: 0 + m_Width: 63 + m_Height: 64 + - m_X: 510 + m_Y: 81 + m_Width: 49 + m_Height: 78 + - m_X: 291 + m_Y: 83 + m_Width: 37 + m_Height: 62 + - m_X: 389 + m_Y: 148 + m_Width: 74 + m_Height: 80 + - m_X: 291 + m_Y: 149 + m_Width: 55 + m_Height: 80 + - m_X: 193 + m_Y: 166 + m_Width: 64 + m_Height: 64 + - m_X: 346 + m_Y: 149 + m_Width: 36 + m_Height: 81 m_FreeGlyphRects: - m_X: 83 m_Y: 33 @@ -695,50 +902,14 @@ MonoBehaviour: m_Y: 201 m_Width: 5 m_Height: 822 - - m_X: 449 - m_Y: 80 - m_Width: 1 - m_Height: 943 - - m_X: 389 - m_Y: 148 - m_Width: 634 - m_Height: 875 - - m_X: 449 - m_Y: 82 - m_Width: 574 - m_Height: 941 - - m_X: 389 - m_Y: 81 - m_Width: 2 - m_Height: 942 - m_X: 228 m_Y: 80 m_Width: 33 m_Height: 3 - - m_X: 291 - m_Y: 149 - m_Width: 732 - m_Height: 874 - - m_X: 291 - m_Y: 83 - m_Width: 37 - m_Height: 940 - m_X: 131 m_Y: 159 m_Width: 29 m_Height: 2 - - m_X: 131 - m_Y: 223 - m_Width: 892 - m_Height: 800 - - m_X: 193 - m_Y: 166 - m_Width: 830 - m_Height: 857 - - m_X: 193 - m_Y: 161 - m_Width: 35 - m_Height: 862 - m_X: 64 m_Y: 118 m_Width: 7 @@ -751,18 +922,82 @@ MonoBehaviour: m_Y: 118 m_Width: 7 m_Height: 41 - - m_X: 510 - m_Y: 81 - m_Width: 59 - m_Height: 942 - m_X: 635 m_Y: 80 m_Width: 388 m_Height: 943 - m_X: 767 - m_Y: 0 + m_Y: 68 m_Width: 256 + m_Height: 955 + - m_X: 828 + m_Y: 64 + m_Width: 195 + m_Height: 959 + - m_X: 978 + m_Y: 0 + m_Width: 45 m_Height: 1023 + - m_X: 559 + m_Y: 82 + m_Width: 464 + m_Height: 941 + - m_X: 559 + m_Y: 81 + m_Width: 10 + m_Height: 942 + - m_X: 449 + m_Y: 80 + m_Width: 1 + m_Height: 68 + - m_X: 389 + m_Y: 81 + m_Width: 2 + m_Height: 67 + - m_X: 449 + m_Y: 82 + m_Width: 61 + m_Height: 66 + - m_X: 463 + m_Y: 82 + m_Width: 47 + m_Height: 941 + - m_X: 463 + m_Y: 159 + m_Width: 560 + m_Height: 864 + - m_X: 291 + m_Y: 145 + m_Width: 37 + m_Height: 4 + - m_X: 193 + m_Y: 161 + m_Width: 35 + m_Height: 5 + - m_X: 131 + m_Y: 230 + m_Width: 892 + m_Height: 793 + - m_X: 131 + m_Y: 223 + m_Width: 62 + m_Height: 800 + - m_X: 257 + m_Y: 166 + m_Width: 34 + m_Height: 857 + - m_X: 382 + m_Y: 228 + m_Width: 641 + m_Height: 795 + - m_X: 382 + m_Y: 149 + m_Width: 7 + m_Height: 874 + - m_X: 257 + m_Y: 229 + m_Width: 89 + m_Height: 794 m_fontInfo: Name: PointSize: 0 diff --git a/Assets/NewUI/LevelTypeSelection/Easy.png b/Assets/NewUI/LevelTypeSelection/LevelInfoBar.png similarity index 100% rename from Assets/NewUI/LevelTypeSelection/Easy.png rename to Assets/NewUI/LevelTypeSelection/LevelInfoBar.png diff --git a/Assets/NewUI/LevelTypeSelection/Easy.png.meta b/Assets/NewUI/LevelTypeSelection/LevelInfoBar.png.meta similarity index 100% rename from Assets/NewUI/LevelTypeSelection/Easy.png.meta rename to Assets/NewUI/LevelTypeSelection/LevelInfoBar.png.meta diff --git a/Assets/NewUI/Levels.meta b/Assets/NewUI/Levels.meta new file mode 100644 index 00000000..00a3e977 --- /dev/null +++ b/Assets/NewUI/Levels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2c1807f466295246810dc3f215e19c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/Bar.png b/Assets/NewUI/Levels/Bar.png new file mode 100644 index 00000000..b83db7fb Binary files /dev/null and b/Assets/NewUI/Levels/Bar.png differ diff --git a/Assets/NewUI/Levels/Bar.png.meta b/Assets/NewUI/Levels/Bar.png.meta new file mode 100644 index 00000000..845dec8e --- /dev/null +++ b/Assets/NewUI/Levels/Bar.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 023310cf05cb4c64085aa1093e30fb18 +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/Levels out of bg.png b/Assets/NewUI/Levels/Levels out of bg.png new file mode 100644 index 00000000..d2139c6f Binary files /dev/null and b/Assets/NewUI/Levels/Levels out of bg.png differ diff --git a/Assets/NewUI/Levels/Levels out of bg.png.meta b/Assets/NewUI/Levels/Levels out of bg.png.meta new file mode 100644 index 00000000..ec19e6c4 --- /dev/null +++ b/Assets/NewUI/Levels/Levels out of bg.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: d146db74bdaadd94099a26d54f325a12 +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/Selected Level.png b/Assets/NewUI/Levels/Selected Level.png new file mode 100644 index 00000000..0bfaaf43 Binary files /dev/null and b/Assets/NewUI/Levels/Selected Level.png differ diff --git a/Assets/NewUI/Levels/Selected Level.png.meta b/Assets/NewUI/Levels/Selected Level.png.meta new file mode 100644 index 00000000..4ef85151 --- /dev/null +++ b/Assets/NewUI/Levels/Selected Level.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: d6050c224724bfa449d8aec816e61b7a +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/Yellow checkpoint.png b/Assets/NewUI/Levels/Yellow checkpoint.png new file mode 100644 index 00000000..8edcd6f8 Binary files /dev/null and b/Assets/NewUI/Levels/Yellow checkpoint.png differ diff --git a/Assets/NewUI/Levels/Yellow checkpoint.png.meta b/Assets/NewUI/Levels/Yellow checkpoint.png.meta new file mode 100644 index 00000000..af809466 --- /dev/null +++ b/Assets/NewUI/Levels/Yellow checkpoint.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 76bca4dd2bbcefc48a75eb4c4932db1e +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/blue checkpoint.png b/Assets/NewUI/Levels/blue checkpoint.png new file mode 100644 index 00000000..42b67abf Binary files /dev/null and b/Assets/NewUI/Levels/blue checkpoint.png differ diff --git a/Assets/NewUI/Levels/blue checkpoint.png.meta b/Assets/NewUI/Levels/blue checkpoint.png.meta new file mode 100644 index 00000000..6d41dfc1 --- /dev/null +++ b/Assets/NewUI/Levels/blue checkpoint.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 1f5e9f906507b1f44965a588fbb98a2f +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/blue level.png b/Assets/NewUI/Levels/blue level.png new file mode 100644 index 00000000..c7219e43 Binary files /dev/null and b/Assets/NewUI/Levels/blue level.png differ diff --git a/Assets/NewUI/Levels/blue level.png.meta b/Assets/NewUI/Levels/blue level.png.meta new file mode 100644 index 00000000..a9e286c5 --- /dev/null +++ b/Assets/NewUI/Levels/blue level.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 169ba05639ae5554c98c89c6b79786ed +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/imcomplete checkpoint.png b/Assets/NewUI/Levels/imcomplete checkpoint.png new file mode 100644 index 00000000..51e3e042 Binary files /dev/null and b/Assets/NewUI/Levels/imcomplete checkpoint.png differ diff --git a/Assets/NewUI/Levels/imcomplete checkpoint.png.meta b/Assets/NewUI/Levels/imcomplete checkpoint.png.meta new file mode 100644 index 00000000..dedfc4ab --- /dev/null +++ b/Assets/NewUI/Levels/imcomplete checkpoint.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 444d970200880f444b426c27318dfde0 +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/levels.png b/Assets/NewUI/Levels/levels.png new file mode 100644 index 00000000..48461f7d Binary files /dev/null and b/Assets/NewUI/Levels/levels.png differ diff --git a/Assets/NewUI/Levels/levels.png.meta b/Assets/NewUI/Levels/levels.png.meta new file mode 100644 index 00000000..f6dae3c7 --- /dev/null +++ b/Assets/NewUI/Levels/levels.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 3ff2a5595951ed44bba645898b86eff7 +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/stage.png b/Assets/NewUI/Levels/stage.png new file mode 100644 index 00000000..c7219e43 Binary files /dev/null and b/Assets/NewUI/Levels/stage.png differ diff --git a/Assets/NewUI/Levels/stage.png.meta b/Assets/NewUI/Levels/stage.png.meta new file mode 100644 index 00000000..76d5498b --- /dev/null +++ b/Assets/NewUI/Levels/stage.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 9c9761f58631ff94d9d5186cb7bd2207 +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NewUI/Levels/text bg 1.png b/Assets/NewUI/Levels/text bg 1.png new file mode 100644 index 00000000..c1d83083 Binary files /dev/null and b/Assets/NewUI/Levels/text bg 1.png differ diff --git a/Assets/NewUI/Levels/text bg 1.png.meta b/Assets/NewUI/Levels/text bg 1.png.meta new file mode 100644 index 00000000..ca2517de --- /dev/null +++ b/Assets/NewUI/Levels/text bg 1.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 06dffca9e3f00254ca057e54eeaf4db6 +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: 0, y: 0, z: 0, w: 0} + 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 + - serializedVersion: 3 + buildTarget: Server + 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: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PipeOut/Scenes/HomeScene.unity b/Assets/PipeOut/Scenes/HomeScene.unity index ea0c6927..d2d8fc08 100644 --- a/Assets/PipeOut/Scenes/HomeScene.unity +++ b/Assets/PipeOut/Scenes/HomeScene.unity @@ -205,6 +205,96 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 12730733} m_CullTransparentMesh: 1 +--- !u!1 &27920171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 27920172} + - component: {fileID: 27920175} + - component: {fileID: 27920174} + - component: {fileID: 27920173} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &27920172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 27920171} + 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: 635984275} + m_Father: {fileID: 792853319} + 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: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &27920173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 27920171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &27920174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 27920171} + 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: 10917, 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 &27920175 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 27920171} + m_CullTransparentMesh: 1 --- !u!114 &45379779 MonoBehaviour: m_ObjectHideFlags: 0 @@ -235,6 +325,46 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} m_EffectDistance: {x: 1, y: -2} m_UseGraphicAlpha: 1 +--- !u!21 &50162020 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Sprites/Default + m_Shader: {fileID: 10753, 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: + - _AlphaTex: + 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} + m_Ints: [] + m_Floats: + - PixelSnap: 0 + - _EnableExternalAlpha: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] --- !u!1 &70567080 GameObject: m_ObjectHideFlags: 0 @@ -310,36 +440,46 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 70567080} m_CullTransparentMesh: 1 ---- !u!114 &79673812 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804907} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 0, y: -2} - m_UseGraphicAlpha: 1 ---- !u!114 &79673813 -MonoBehaviour: +--- !u!21 &82096906 +Material: + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804907} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 2, y: -2} - m_UseGraphicAlpha: 1 + m_Name: 2DxFX/Standard/GrayScale + m_Shader: {fileID: 4800000, guid: 62ced1108742e2c4d99c2a6c0708300f, 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: + - _Alpha: 0 + - _ColorMask: 15 + - _EffectAmount: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] --- !u!114 &133113418 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1307,280 +1447,161 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805001} m_CullTransparentMesh: 1 ---- !u!1001 &272220713 +--- !u!224 &280846274 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + m_PrefabInstance: {fileID: 287624911} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &287624911 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: serializedVersion: 3 - m_TransformParent: {fileID: 1790415148045805403} + m_TransformParent: {fileID: 1449924014} m_Modifications: - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 1053783035578079244, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_text + value: 6 / 50 + objectReference: {fileID: 0} + - target: {fileID: 1218484714929747837, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1874732832837415157, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_Name + value: Advance + objectReference: {fileID: 0} + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_Pivot.x value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_Pivot.y value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_AnchorMax.x - value: 0.5 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_AnchorMax.y - value: 0.5 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_AnchorMin.x - value: 0.5 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_AnchorMin.y - value: 0.5 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_SizeDelta.x - value: 100 + value: -1019.62 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_SizeDelta.y - value: 100 + value: 345.64 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalRotation.y - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1025665394565778738, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, + - target: {fileID: 4640160915996998964, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: levelGroup + value: + objectReference: {fileID: 11400000, guid: d606e6845dd447e2bf40638facbc7c7e, + type: 2} + - target: {fileID: 7107088943786912931, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 71d433ef8c5bcdb408ef73033c782e8b, + type: 3} + - target: {fileID: 7549667834109842542, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_text + value: Advance + objectReference: {fileID: 0} + - target: {fileID: 7924325999141675328, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_Name - value: Fx_Star_White_Small + value: Advance objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, type: 3} ---- !u!224 &272220714 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - m_PrefabInstance: {fileID: 272220713} - m_PrefabAsset: {fileID: 0} ---- !u!224 &280846274 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - m_PrefabInstance: {fileID: 287624911} - m_PrefabAsset: {fileID: 0} ---- !u!1001 &287624911 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1449924014} - m_Modifications: - - target: {fileID: 1053783035578079244, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_text - value: 6 / 50 - objectReference: {fileID: 0} - - target: {fileID: 1218484714929747837, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1874732832837415157, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_Name - value: Advance - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_SizeDelta.x - value: -1019.62 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_SizeDelta.y - value: 345.64 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, + - target: {fileID: 8547466323607184844, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4603273322937165292, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4640160915996998964, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: levelGroup - value: - objectReference: {fileID: 11400000, guid: d606e6845dd447e2bf40638facbc7c7e, - type: 2} - - target: {fileID: 7107088943786912931, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 71d433ef8c5bcdb408ef73033c782e8b, - type: 3} - - target: {fileID: 7549667834109842542, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_text - value: Advance - objectReference: {fileID: 0} - - target: {fileID: 7924325999141675328, guid: 3fe1e610ab27a064392b55794734a610, - type: 3} - propertyPath: m_Name - value: Advance + value: -120.79001 objectReference: {fileID: 0} - target: {fileID: 8556031825795409222, guid: 3fe1e610ab27a064392b55794734a610, type: 3} @@ -2302,6 +2323,84 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 333043760} m_CullTransparentMesh: 1 +--- !u!1 &340663870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 340663871} + - component: {fileID: 340663873} + - component: {fileID: 340663872} + m_Layer: 5 + m_Name: TitleBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &340663871 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 340663870} + 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: 1790415148045805370} + - {fileID: 1790415148045805294} + - {fileID: 1902230462} + m_Father: {fileID: 1790415148045805364} + 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: 620} + m_SizeDelta: {x: 1080, y: 143} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &340663872 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 340663870} + 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: 21300000, guid: d66bfac5b30f4994c8f9939cf8276532, type: 3} + 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 &340663873 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 340663870} + m_CullTransparentMesh: 1 --- !u!114 &343467243 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2839,132 +2938,8 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 382341784} m_CullTransparentMesh: 1 ---- !u!1001 &386392574 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1790415148045805348} - m_Modifications: - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_SizeDelta.x - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_SizeDelta.y - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778738, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Name - value: Fx_Star_White_Small - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, type: 3} ---- !u!224 &386392575 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - m_PrefabInstance: {fileID: 386392574} - m_PrefabAsset: {fileID: 0} ---- !u!1 &394246909 -GameObject: +--- !u!1 &394246909 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -3173,6 +3148,86 @@ CanvasGroup: m_Interactable: 1 m_BlocksRaycasts: 1 m_IgnoreParentGroups: 0 +--- !u!21 &409966723 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 2DxFX/Standard/GrayScale + m_Shader: {fileID: 4800000, guid: 62ced1108742e2c4d99c2a6c0708300f, 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: + - _Alpha: 0 + - _ColorMask: 15 + - _EffectAmount: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] +--- !u!21 &409998543 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 2DxFX/Standard/GrayScale + m_Shader: {fileID: 4800000, guid: 62ced1108742e2c4d99c2a6c0708300f, 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: + - _Alpha: 0 + - _ColorMask: 15 + - _EffectAmount: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] --- !u!21 &412830166 Material: serializedVersion: 8 @@ -3454,7 +3509,7 @@ PrefabInstance: - target: {fileID: 1218484714929747837, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 1874732832837415157, guid: 3fe1e610ab27a064392b55794734a610, type: 3} @@ -3583,6 +3638,11 @@ PrefabInstance: propertyPath: m_Name value: Medium objectReference: {fileID: 0} + - target: {fileID: 8547466323607184844, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -120.79001 + objectReference: {fileID: 0} - target: {fileID: 8556031825795409222, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_SizeDelta.x @@ -3923,36 +3983,46 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} m_EffectDistance: {x: 1, y: -2} m_UseGraphicAlpha: 1 ---- !u!114 &468495167 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805005} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 0, y: -2} - m_UseGraphicAlpha: 1 ---- !u!114 &468495168 -MonoBehaviour: +--- !u!21 &480909884 +Material: + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805005} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 2, y: -2} - m_UseGraphicAlpha: 1 + m_Name: 2DxFX/Standard/GrayScale + m_Shader: {fileID: 4800000, guid: 62ced1108742e2c4d99c2a6c0708300f, 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: + - _Alpha: 0 + - _ColorMask: 15 + - _EffectAmount: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] --- !u!114 &509831424 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4256,7 +4326,7 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 535983220} m_PrefabAsset: {fileID: 0} ---- !u!1 &559534780 +--- !u!1 &561599788 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4264,49 +4334,50 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 559534781} - - component: {fileID: 559534783} - - component: {fileID: 559534782} + - component: {fileID: 561599789} + - component: {fileID: 561599791} + - component: {fileID: 561599790} + - component: {fileID: 561599792} + - component: {fileID: 561599793} m_Layer: 5 - m_Name: TitleBg + m_Name: Image (1) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &559534781 +--- !u!224 &561599789 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 559534780} + m_GameObject: {fileID: 561599788} 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: 1790415148045805321} - m_Father: {fileID: 1790415148045805364} + m_Children: [] + m_Father: {fileID: 1943962637} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 231} - m_Pivot: {x: 0.5, y: 1} ---- !u!114 &559534782 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.00000026822, y: 327} + m_SizeDelta: {x: 223.78, y: 163.46} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &561599790 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 559534780} + m_GameObject: {fileID: 561599788} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: - m_Material: {fileID: 0} + m_Material: {fileID: 186086254} m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} @@ -4314,7 +4385,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 6731b0963109040fcb82ad50cbbef63c, type: 3} + m_Sprite: {fileID: 21300000, guid: da074439bb2a45749d33e78bf73cd4a6, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -4324,109 +4395,32 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &559534783 +--- !u!222 &561599791 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 559534780} + m_GameObject: {fileID: 561599788} m_CullTransparentMesh: 1 ---- !u!1 &561599788 -GameObject: +--- !u!114 &561599792 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 561599789} - - component: {fileID: 561599791} - - component: {fileID: 561599790} - - component: {fileID: 561599792} - - component: {fileID: 561599793} - m_Layer: 5 - m_Name: Image (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &561599789 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 561599788} - 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: 1943962637} - 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.00000026822, y: 327} - m_SizeDelta: {x: 223.78, y: 163.46} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &561599790 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 561599788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 186086254} - 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: 21300000, guid: da074439bb2a45749d33e78bf73cd4a6, type: 3} - 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 &561599791 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 561599788} - m_CullTransparentMesh: 1 ---- !u!114 &561599792 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 561599788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ee158225ee1e59f4791627785501d950, type: 3} - m_Name: - m_EditorClassIdentifier: - shaderTypes: 0 - normalStrength: 5 - normalSmoothing: 1 - computingNormal: 0 ---- !u!225 &561599793 -CanvasGroup: + m_GameObject: {fileID: 561599788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ee158225ee1e59f4791627785501d950, type: 3} + m_Name: + m_EditorClassIdentifier: + shaderTypes: 0 + normalStrength: 5 + normalSmoothing: 1 + computingNormal: 0 +--- !u!225 &561599793 +CanvasGroup: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -4535,6 +4529,81 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} m_EffectDistance: {x: 2, y: -2} m_UseGraphicAlpha: 1 +--- !u!1 &635984274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 635984275} + - component: {fileID: 635984277} + - component: {fileID: 635984276} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &635984275 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 635984274} + 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: 27920172} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.0001937352} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &635984276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 635984274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 1 +--- !u!114 &635984277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 635984274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 57 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 250, y: 250} + m_Spacing: {x: 95.97, y: 179.57} + m_Constraint: 0 + m_ConstraintCount: 2 --- !u!1 &643849271 GameObject: m_ObjectHideFlags: 0 @@ -4608,43 +4677,6 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 1114734998} m_PrefabAsset: {fileID: 0} ---- !u!1 &663915882 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 663915883} - m_Layer: 5 - m_Name: Advance - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &663915883 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 663915882} - 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: 1790415148045805354} - - {fileID: 1790415148045805373} - m_Father: {fileID: 1449924014} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 531.5, y: -1266.41} - m_SizeDelta: {x: -1015.8, y: 252.3} - m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &672873772 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5085,7 +5117,37 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805053} m_CullTransparentMesh: 1 ---- !u!1 &760563380 +--- !u!114 &780747730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790415148045804890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 2, y: -2} + m_UseGraphicAlpha: 1 +--- !u!114 &780747731 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790415148045804890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 1, y: -2} + m_UseGraphicAlpha: 1 +--- !u!1 &783392352 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5093,155 +5155,74 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 760563381} - - component: {fileID: 760563384} - - component: {fileID: 760563383} - - component: {fileID: 760563382} + - component: {fileID: 783392353} + - component: {fileID: 783392354} m_Layer: 5 - m_Name: Scrollbar Vertical - m_TagString: Untagged + m_Name: Facebook + m_TagString: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &760563381 +--- !u!224 &783392353 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760563380} + m_GameObject: {fileID: 783392352} 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: 1883766545} - m_Father: {fileID: 1790415148045805453} + - {fileID: 1790415148045805343} + m_Father: {fileID: 1790415148045805325} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -5, y: -225} - m_SizeDelta: {x: 20, y: -864.36} - m_Pivot: {x: 1, y: 1} ---- !u!114 &760563382 -MonoBehaviour: + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1078, y: 280} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &783392354 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760563380} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 1298075905} - m_HandleRect: {fileID: 1298075904} - m_Direction: 2 - m_Value: 1.0000021 - m_Size: 0.92565423 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &760563383 + m_GameObject: {fileID: 783392352} + m_CullTransparentMesh: 0 +--- !u!114 &788023182 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760563380} + m_GameObject: {fileID: 1790415148045805043} 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: 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 &760563384 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 760563380} - m_CullTransparentMesh: 1 ---- !u!114 &780747730 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804890} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} + m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} m_Name: m_EditorClassIdentifier: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 2, y: -2} + m_EffectDistance: {x: 1, y: -1} m_UseGraphicAlpha: 1 ---- !u!114 &780747731 +--- !u!114 &788023183 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804890} + m_GameObject: {fileID: 1790415148045805043} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} m_Name: m_EditorClassIdentifier: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 1, y: -2} + m_EffectDistance: {x: 1, y: -1} m_UseGraphicAlpha: 1 ---- !u!1 &783392352 +--- !u!1 &792853318 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5249,73 +5230,106 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 783392353} - - component: {fileID: 783392354} + - component: {fileID: 792853319} + - component: {fileID: 792853322} + - component: {fileID: 792853321} + - component: {fileID: 792853320} m_Layer: 5 - m_Name: Facebook - m_TagString: + m_Name: Scroll View + m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &783392353 +--- !u!224 &792853319 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783392352} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 792853318} + 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: 1790415148045805343} - m_Father: {fileID: 1790415148045805325} + - {fileID: 27920172} + - {fileID: 1204863720} + m_Father: {fileID: 1790415148045805451} 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: 1078, y: 280} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -7.7963, y: -81.500015} + m_SizeDelta: {x: 1055.6, y: 1322.5} m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &783392354 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 783392352} - m_CullTransparentMesh: 0 ---- !u!114 &788023182 +--- !u!114 &792853320 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805043} + m_GameObject: {fileID: 792853318} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} m_Name: m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 1, y: -1} - m_UseGraphicAlpha: 1 ---- !u!114 &788023183 + m_Content: {fileID: 635984275} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 27920172} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1204863721} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &792853321 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805043} + m_GameObject: {fileID: 792853318} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 1, y: -1} - m_UseGraphicAlpha: 1 + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + 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 &792853322 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792853318} + m_CullTransparentMesh: 1 --- !u!1 &794157563 GameObject: m_ObjectHideFlags: 0 @@ -5391,43 +5405,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 794157563} m_CullTransparentMesh: 1 ---- !u!1 &794660264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 794660265} - m_Layer: 5 - m_Name: Hard - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &794660265 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 794660264} - 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: 1790415148045805397} - - {fileID: 1790415148045805435} - m_Father: {fileID: 1449924014} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 531.5, y: -892.99005} - m_SizeDelta: {x: -1015.8, y: 252.3} - m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &795128800 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5781,132 +5758,8 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} m_EffectDistance: {x: 1, y: -2} m_UseGraphicAlpha: 1 ---- !u!1001 &893368063 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1790415148045805425} - m_Modifications: - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_SizeDelta.x - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_SizeDelta.y - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778738, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Name - value: Fx_Star_White_Small - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, type: 3} ---- !u!224 &893368064 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - m_PrefabInstance: {fileID: 893368063} - m_PrefabAsset: {fileID: 0} ---- !u!1 &902008754 -GameObject: +--- !u!1 &902008754 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -6242,6 +6095,81 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} m_EffectDistance: {x: 1, y: -2} m_UseGraphicAlpha: 1 +--- !u!1 &996169756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 996169757} + - component: {fileID: 996169759} + - component: {fileID: 996169758} + m_Layer: 5 + m_Name: BG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &996169757 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996169756} + 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: 1790415148045805364} + 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: 1080, y: 1920} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &996169758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996169756} + 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: 0.48235294} + 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: 21300000, guid: 3ff2a5595951ed44bba645898b86eff7, type: 3} + 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 &996169759 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 996169756} + m_CullTransparentMesh: 1 --- !u!1 &1014461977 GameObject: m_ObjectHideFlags: 0 @@ -6498,36 +6426,6 @@ CanvasGroup: m_Interactable: 1 m_BlocksRaycasts: 1 m_IgnoreParentGroups: 0 ---- !u!114 &1042758086 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804960} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 0, y: -2} - m_UseGraphicAlpha: 1 ---- !u!114 &1042758087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804960} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 2, y: -2} - m_UseGraphicAlpha: 1 --- !u!1 &1045843563 GameObject: m_ObjectHideFlags: 0 @@ -7665,7 +7563,7 @@ PrefabInstance: - target: {fileID: 1218484714929747837, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 1874732832837415157, guid: 3fe1e610ab27a064392b55794734a610, type: 3} @@ -7794,6 +7692,11 @@ PrefabInstance: propertyPath: m_Name value: Hard objectReference: {fileID: 0} + - target: {fileID: 8547466323607184844, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -120.79001 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -8143,6 +8046,132 @@ RectTransform: type: 3} m_PrefabInstance: {fileID: 1192910357} m_PrefabAsset: {fileID: 0} +--- !u!1 &1204863719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1204863720} + - component: {fileID: 1204863723} + - component: {fileID: 1204863722} + - component: {fileID: 1204863721} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1204863720 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204863719} + 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: 1393548017} + m_Father: {fileID: 792853319} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: -17} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1204863721 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204863719} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 1821027292} + m_HandleRect: {fileID: 1821027291} + m_Direction: 2 + m_Value: 1 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1204863722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204863719} + 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: 0} + 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 &1204863723 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204863719} + m_CullTransparentMesh: 1 --- !u!1 &1206281564 GameObject: m_ObjectHideFlags: 0 @@ -8830,7 +8859,7 @@ PrefabInstance: - target: {fileID: 1218484714929747837, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 1874732832837415157, guid: 3fe1e610ab27a064392b55794734a610, type: 3} @@ -8959,41 +8988,16 @@ PrefabInstance: propertyPath: m_Name value: Expert objectReference: {fileID: 0} + - target: {fileID: 8547466323607184844, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -120.79001 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 3fe1e610ab27a064392b55794734a610, type: 3} ---- !u!114 &1265637607 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804928} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 1, y: -2} - m_UseGraphicAlpha: 1 ---- !u!114 &1265637608 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804928} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 2, y: 2} - m_UseGraphicAlpha: 1 --- !u!114 &1277250572 MonoBehaviour: m_ObjectHideFlags: 0 @@ -9129,7 +9133,7 @@ CanvasGroup: m_Interactable: 1 m_BlocksRaycasts: 1 m_IgnoreParentGroups: 0 ---- !u!1 &1298075903 +--- !u!1 &1300430263 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -9137,84 +9141,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1298075904} - - component: {fileID: 1298075906} - - component: {fileID: 1298075905} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &1298075904 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1298075903} - 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: 1883766545} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.07434577} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -5.38, y: -369.82} - m_SizeDelta: {x: 30.77, y: 1205.11} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1298075905 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1298075903} - 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: 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 &1298075906 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1298075903} - m_CullTransparentMesh: 1 ---- !u!1 &1300430263 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1300430264} - - component: {fileID: 1300430266} - - component: {fileID: 1300430265} + - component: {fileID: 1300430264} + - component: {fileID: 1300430266} + - component: {fileID: 1300430265} m_Layer: 5 m_Name: BottomBar m_TagString: Untagged @@ -9533,43 +9462,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1336803836} m_CullTransparentMesh: 1 ---- !u!1 &1338199914 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1338199915} - m_Layer: 5 - m_Name: Medium - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &1338199915 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1338199914} - 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: 1790415148045805358} - - {fileID: 1790415148045805426} - m_Father: {fileID: 1449924014} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 531.5, y: -519.57} - m_SizeDelta: {x: -1015.8, y: 252.3} - m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1341897756 GameObject: m_ObjectHideFlags: 0 @@ -9957,6 +9849,42 @@ Material: - _ShadowColor: {r: 0, g: 0, b: 0, a: 1} - _ShineColor: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] +--- !u!1 &1393548016 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1393548017} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1393548017 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1393548016} + 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: 1821027291} + m_Father: {fileID: 1204863720} + 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: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} --- !u!21 &1423836287 Material: serializedVersion: 8 @@ -10446,10 +10374,6 @@ RectTransform: - {fileID: 663422808} - {fileID: 280846274} - {fileID: 4545044} - - {fileID: 1338199915} - - {fileID: 794660265} - - {fileID: 663915883} - - {fileID: 1915728734} m_Father: {fileID: 2099748901} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -11024,130 +10948,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804941} m_CullTransparentMesh: 1 ---- !u!1001 &1525162772 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1790415148045805360} - m_Modifications: - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMax.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMax.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMin.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchorMin.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_SizeDelta.x - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_SizeDelta.y - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1025665394565778738, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - propertyPath: m_Name - value: Fx_Star_White_Small - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, type: 3} ---- !u!224 &1525162773 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1025665394565778737, guid: cc8c97330e5a14f8fb3d5453ca4d2d2b, - type: 3} - m_PrefabInstance: {fileID: 1525162772} - m_PrefabAsset: {fileID: 0} --- !u!1 &1595623806 GameObject: m_ObjectHideFlags: 0 @@ -11556,39 +11356,9 @@ RectTransform: m_AnchoredPosition: {x: 1177, y: 0} m_SizeDelta: {x: 1080, y: 1920} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1675783786 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804965} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 0, y: -2} - m_UseGraphicAlpha: 1 ---- !u!114 &1675783787 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804965} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} - m_Name: - m_EditorClassIdentifier: - m_EffectColor: {r: 0, g: 0, b: 0, a: 1} - m_EffectDistance: {x: 2, y: -2} - m_UseGraphicAlpha: 1 ---- !u!21 &1676104001 -Material: - serializedVersion: 8 +--- !u!21 &1676104001 +Material: + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -12078,6 +11848,81 @@ RectTransform: m_AnchoredPosition: {x: -181.45, y: -218.86} m_SizeDelta: {x: 647.1, y: 165.72} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1821027290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1821027291} + - component: {fileID: 1821027293} + - component: {fileID: 1821027292} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1821027291 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821027290} + 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: 1393548017} + 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: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1821027292 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821027290} + 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: 0} + 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 &1821027293 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821027290} + m_CullTransparentMesh: 1 --- !u!114 &1827497292 MonoBehaviour: m_ObjectHideFlags: 0 @@ -12363,7 +12208,7 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} m_EffectDistance: {x: 1, y: -2} m_UseGraphicAlpha: 1 ---- !u!1 &1883766544 +--- !u!1 &1902230461 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -12371,34 +12216,133 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1883766545} + - component: {fileID: 1902230462} + - component: {fileID: 1902230464} + - component: {fileID: 1902230463} m_Layer: 5 - m_Name: Sliding Area + m_Name: Text (TMP) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1883766545 +--- !u!224 &1902230462 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1883766544} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 1902230461} + 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: 1298075904} - m_Father: {fileID: 760563381} + m_Children: [] + m_Father: {fileID: 340663871} 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: -20, y: -20} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 173.4, y: 0} + m_SizeDelta: {x: 346.8, y: 143} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1902230463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1902230461} + 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: LEVELS + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: f9650ff3b67d45e42aa51501d10136f4, type: 2} + m_sharedMaterial: {fileID: 2039440194532944411, guid: f9650ff3b67d45e42aa51501d10136f4, + 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: 73.4 + m_fontSizeBase: 73.4 + 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 &1902230464 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1902230461} + m_CullTransparentMesh: 1 --- !u!114 &1914069687 MonoBehaviour: m_ObjectHideFlags: 0 @@ -12429,7 +12373,47 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 1} m_EffectDistance: {x: 1, y: -2} m_UseGraphicAlpha: 1 ---- !u!1 &1915728733 +--- !u!21 &1919487348 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 2DxFX/Standard/GrayScale + m_Shader: {fileID: 4800000, guid: 62ced1108742e2c4d99c2a6c0708300f, 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: + - _Alpha: 0 + - _ColorMask: 15 + - _EffectAmount: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] +--- !u!1 &1930289644 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -12437,35 +12421,74 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1915728734} + - component: {fileID: 1930289645} + - component: {fileID: 1930289647} + - component: {fileID: 1930289646} m_Layer: 5 - m_Name: Expert + m_Name: Top m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!224 &1915728734 + m_IsActive: 1 +--- !u!224 &1930289645 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1915728733} + m_GameObject: {fileID: 1930289644} 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: 1790415148045805301} - - {fileID: 1790415148045805290} - m_Father: {fileID: 1449924014} + - {fileID: 1790415148045805312} + m_Father: {fileID: 1790415148045805364} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 531.5, y: -1639.8301} - m_SizeDelta: {x: -1015.8, y: 252.3} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -105.140015} + m_SizeDelta: {x: 1080, y: 210.28} m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1930289646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930289644} + 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: 21300000, guid: cba95c35280ba1d4290b0acd3d8ab140, type: 3} + 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 &1930289647 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1930289644} + m_CullTransparentMesh: 1 --- !u!1 &1943962636 GameObject: m_ObjectHideFlags: 0 @@ -13899,24 +13922,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804898 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805292} - - component: {fileID: 1790415148045805110} - - component: {fileID: 1790415148045805493} - m_Layer: 5 - m_Name: Counter - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804899 GameObject: m_ObjectHideFlags: 0 @@ -13988,7 +13993,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!1 &1790415148045804903 GameObject: m_ObjectHideFlags: 0 @@ -14065,26 +14070,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804907 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805301} - - component: {fileID: 1790415148045805119} - - component: {fileID: 1790415148045805504} - - component: {fileID: 79673813} - - component: {fileID: 79673812} - m_Layer: 5 - m_Name: Title - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804908 GameObject: m_ObjectHideFlags: 0 @@ -14106,45 +14091,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804909 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805426} - - component: {fileID: 1790415148045805121} - - component: {fileID: 1790415148045805509} - - component: {fileID: 1790415148045805665} - - component: {fileID: 1790415148045805508} - - component: {fileID: 1790415148045805507} - m_Layer: 5 - m_Name: Medium - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1790415148045804910 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805303} - - component: {fileID: 1790415148045805122} - - component: {fileID: 1790415148045805510} - m_Layer: 5 - m_Name: Counter - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804911 GameObject: m_ObjectHideFlags: 0 @@ -14183,24 +14129,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804913 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805306} - - component: {fileID: 1790415148045805125} - - component: {fileID: 1790415148045805513} - m_Layer: 5 - m_Name: Value - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804914 GameObject: m_ObjectHideFlags: 0 @@ -14394,24 +14322,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804924 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805317} - - component: {fileID: 1790415148045805530} - - component: {fileID: 1790415148045805529} - m_Layer: 5 - m_Name: Content - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804925 GameObject: m_ObjectHideFlags: 0 @@ -14448,7 +14358,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!1 &1790415148045804927 GameObject: m_ObjectHideFlags: 0 @@ -14467,26 +14377,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804928 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805321} - - component: {fileID: 1790415148045805138} - - component: {fileID: 1790415148045805535} - - component: {fileID: 1265637608} - - component: {fileID: 1265637607} - m_Layer: 5 - m_Name: Title - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804929 GameObject: m_ObjectHideFlags: 0 @@ -14580,24 +14470,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804934 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805327} - - component: {fileID: 1790415148045805143} - - component: {fileID: 1790415148045805541} - m_Layer: 5 - m_Name: Value - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804935 GameObject: m_ObjectHideFlags: 0 @@ -14674,24 +14546,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804939 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805332} - - component: {fileID: 1790415148045805148} - - component: {fileID: 1790415148045805546} - m_Layer: 5 - m_Name: AwardIcon - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804940 GameObject: m_ObjectHideFlags: 0 @@ -14782,25 +14636,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804945 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805338} - - component: {fileID: 1790415148045805154} - - component: {fileID: 1790415148045805552} - - component: {fileID: 1790415148045805553} - m_Layer: 5 - m_Name: Viewport - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804946 GameObject: m_ObjectHideFlags: 0 @@ -14949,42 +14784,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804955 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805348} - - component: {fileID: 1790415148045805163} - - component: {fileID: 1790415148045805566} - m_Layer: 5 - m_Name: AvatarGold - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!1 &1790415148045804956 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805349} - - component: {fileID: 1790415148045805567} - - component: {fileID: 1790415148045805568} - m_Layer: 5 - m_Name: Content - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804957 GameObject: m_ObjectHideFlags: 0 @@ -15005,44 +14804,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804958 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805351} - - component: {fileID: 1790415148045805165} - - component: {fileID: 1790415148045805570} - m_Layer: 5 - m_Name: AwardIcon - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1790415148045804960 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805354} - - component: {fileID: 1790415148045805167} - - component: {fileID: 1790415148045805572} - - component: {fileID: 1042758087} - - component: {fileID: 1042758086} - m_Layer: 5 - m_Name: Title - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804961 GameObject: m_ObjectHideFlags: 0 @@ -15116,47 +14877,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804965 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805358} - - component: {fileID: 1790415148045805172} - - component: {fileID: 1790415148045805578} - - component: {fileID: 1675783787} - - component: {fileID: 1675783786} - m_Layer: 5 - m_Name: Title - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1790415148045804966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805290} - - component: {fileID: 1790415148045805173} - - component: {fileID: 1790415148045805581} - - component: {fileID: 1790415148045805490} - - component: {fileID: 1790415148045805580} - - component: {fileID: 1790415148045805579} - m_Layer: 5 - m_Name: Expert - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804967 GameObject: m_ObjectHideFlags: 0 @@ -15177,24 +14897,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804968 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805360} - - component: {fileID: 1790415148045805174} - - component: {fileID: 1790415148045805583} - m_Layer: 5 - m_Name: AvatarGold - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 --- !u!1 &1790415148045804969 GameObject: m_ObjectHideFlags: 0 @@ -15231,24 +14933,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804971 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805362} - - component: {fileID: 1790415148045805176} - - component: {fileID: 1790415148045805586} - m_Layer: 5 - m_Name: Counter - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804972 GameObject: m_ObjectHideFlags: 0 @@ -15290,42 +14974,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804975 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805366} - - component: {fileID: 1790415148045805180} - - component: {fileID: 1790415148045805591} - m_Layer: 5 - m_Name: Counter - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1790415148045804976 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805367} - - component: {fileID: 1790415148045805181} - - component: {fileID: 1790415148045805592} - m_Layer: 5 - m_Name: Value - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804977 GameObject: m_ObjectHideFlags: 0 @@ -15459,24 +15107,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045804984 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805376} - - component: {fileID: 1790415148045805189} - - component: {fileID: 1790415148045805602} - m_Layer: 5 - m_Name: AwardIcon - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045804985 GameObject: m_ObjectHideFlags: 0 @@ -15853,26 +15483,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805005 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805397} - - component: {fileID: 1790415148045805207} - - component: {fileID: 1790415148045805627} - - component: {fileID: 468495168} - - component: {fileID: 468495167} - m_Layer: 5 - m_Name: Title - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045805006 GameObject: m_ObjectHideFlags: 0 @@ -15970,24 +15580,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805013 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805403} - - component: {fileID: 1790415148045805215} - - component: {fileID: 1790415148045805639} - m_Layer: 5 - m_Name: AvatarGold - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 --- !u!1 &1790415148045805014 GameObject: m_ObjectHideFlags: 0 @@ -16006,25 +15598,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805015 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805405} - - component: {fileID: 1790415148045805217} - - component: {fileID: 1790415148045805641} - - component: {fileID: 1790415148045805642} - m_Layer: 5 - m_Name: Viewport - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045805016 GameObject: m_ObjectHideFlags: 0 @@ -16249,23 +15822,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805028 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805418} - - component: {fileID: 1790415148045805655} - m_Layer: 5 - m_Name: Scroll View - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045805029 GameObject: m_ObjectHideFlags: 0 @@ -16380,24 +15936,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805035 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805425} - - component: {fileID: 1790415148045805235} - - component: {fileID: 1790415148045805664} - m_Layer: 5 - m_Name: AvatarGold - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 --- !u!1 &1790415148045805036 GameObject: m_ObjectHideFlags: 0 @@ -16699,27 +16237,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805054 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805373} - - component: {fileID: 1790415148045805254} - - component: {fileID: 1790415148045805689} - - component: {fileID: 1790415148045805599} - - component: {fileID: 1790415148045805688} - - component: {fileID: 1790415148045805687} - m_Layer: 5 - m_Name: Advance - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045805055 GameObject: m_ObjectHideFlags: 0 @@ -16855,23 +16372,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805062 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805453} - - component: {fileID: 1790415148045805703} - m_Layer: 5 - m_Name: Scroll View - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 --- !u!1 &1790415148045805063 GameObject: m_ObjectHideFlags: 0 @@ -16929,24 +16429,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805066 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805456} - - component: {fileID: 1790415148045805265} - - component: {fileID: 1790415148045805710} - m_Layer: 5 - m_Name: AwardIcon - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045805067 GameObject: m_ObjectHideFlags: 0 @@ -17134,27 +16616,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805078 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805435} - - component: {fileID: 1790415148045805276} - - component: {fileID: 1790415148045805724} - - component: {fileID: 1790415148045805673} - - component: {fileID: 1790415148045805723} - - component: {fileID: 1790415148045805722} - m_Layer: 5 - m_Name: Hard - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!1 &1790415148045805079 GameObject: m_ObjectHideFlags: 0 @@ -17212,24 +16673,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1790415148045805082 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1790415148045805472} - - component: {fileID: 1790415148045805280} - - component: {fileID: 1790415148045805729} - m_Layer: 5 - m_Name: Value - m_TagString: - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 --- !u!4 &1790415148045805084 Transform: m_ObjectHideFlags: 0 @@ -20194,14 +19637,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804897} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805110 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804898} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805111 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20266,14 +19701,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804906} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805119 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804907} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805120 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20282,22 +19709,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804908} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805121 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804909} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805122 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804910} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805123 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20314,14 +19725,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804912} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805125 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804913} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805126 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20418,14 +19821,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804927} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805138 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804928} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805139 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20450,14 +19845,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804931} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805143 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804934} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805144 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20490,14 +19877,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804938} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805148 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804939} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805149 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20530,14 +19909,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804944} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805154 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804945} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805155 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20586,14 +19957,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804953} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805163 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804955} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805164 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20602,22 +19965,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804957} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805165 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804958} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805167 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804960} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805168 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20650,45 +19997,13 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804964} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805172 +--- !u!222 &1790415148045805175 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804965} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805173 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804966} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805174 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804968} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805175 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804969} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805176 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804971} + m_GameObject: {fileID: 1790415148045804969} m_CullTransparentMesh: 0 --- !u!222 &1790415148045805177 CanvasRenderer: @@ -20706,22 +20021,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804973} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805180 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804975} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805181 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804976} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805182 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20778,14 +20077,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804983} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805189 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804984} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805190 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20914,14 +20205,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805004} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805207 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805005} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805208 CanvasRenderer: m_ObjectHideFlags: 0 @@ -20962,22 +20245,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805011} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805215 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805013} - m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805217 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805015} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805218 CanvasRenderer: m_ObjectHideFlags: 0 @@ -21106,14 +20373,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805034} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805235 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805035} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805236 CanvasRenderer: m_ObjectHideFlags: 0 @@ -21234,14 +20493,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805052} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805254 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805054} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805255 CanvasRenderer: m_ObjectHideFlags: 0 @@ -21322,14 +20573,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805065} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805265 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805066} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805266 CanvasRenderer: m_ObjectHideFlags: 0 @@ -21402,14 +20645,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805077} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805276 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805078} - m_CullTransparentMesh: 0 --- !u!222 &1790415148045805277 CanvasRenderer: m_ObjectHideFlags: 0 @@ -21434,14 +20669,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805081} m_CullTransparentMesh: 0 ---- !u!222 &1790415148045805280 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805082} - m_CullTransparentMesh: 0 --- !u!223 &1790415148045805282 Canvas: m_ObjectHideFlags: 0 @@ -21581,27 +20808,6 @@ RectTransform: m_AnchoredPosition: {x: 0.0025634766, y: -90} m_SizeDelta: {x: -60.005, y: 4.35} m_Pivot: {x: 0.5, y: 1} ---- !u!224 &1790415148045805290 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804966} - 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: 1790415148045805456} - - {fileID: 1790415148045805303} - m_Father: {fileID: 1915728734} - 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: 144.23999, y: 0} - m_SizeDelta: {x: 697, y: 195} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805291 RectTransform: m_ObjectHideFlags: 0 @@ -21625,26 +20831,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 1078, y: 280} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805292 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804898} - 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: 1790415148045805367} - m_Father: {fileID: 1790415148045805435} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.8, y: 0.5} - m_AnchorMax: {x: 0.8, y: 0.5} - m_AnchoredPosition: {x: -110, y: 0} - m_SizeDelta: {x: 200, y: 59} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805293 RectTransform: m_ObjectHideFlags: 0 @@ -21676,19 +20862,19 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804899} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 1790415148045805331} - m_Father: {fileID: 1790415148045805451} + m_Father: {fileID: 340663871} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.4, y: 1} m_AnchorMax: {x: 0.4, y: 1} - m_AnchoredPosition: {x: 133, y: -55} + m_AnchoredPosition: {x: 517.00006, y: -71.5} m_SizeDelta: {x: 200, y: 59} - m_Pivot: {x: 0.5, y: 1} + m_Pivot: {x: 0.5, y: 0.4999995} --- !u!224 &1790415148045805295 RectTransform: m_ObjectHideFlags: 0 @@ -21806,25 +20992,6 @@ RectTransform: m_AnchoredPosition: {x: -10, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805301 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804907} - 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: 1915728734} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: -962.89984, y: 0} - m_SizeDelta: {x: 209.2, y: 70} - m_Pivot: {x: 0, y: 0.5} --- !u!224 &1790415148045805302 RectTransform: m_ObjectHideFlags: 0 @@ -21838,7 +21005,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1872938449} - - {fileID: 1790415148045805453} - {fileID: 2029147720} - {fileID: 820927358} m_Father: {fileID: 1790415148045805308} @@ -21848,26 +21014,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805303 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804910} - 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: 1790415148045805472} - m_Father: {fileID: 1790415148045805290} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.8, y: 0.5} - m_AnchorMax: {x: 0.8, y: 0.5} - m_AnchoredPosition: {x: -110, y: 0} - m_SizeDelta: {x: 200, y: 59} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805304 RectTransform: m_ObjectHideFlags: 0 @@ -21906,25 +21052,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 190} m_SizeDelta: {x: 630, y: 180} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805306 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804913} - 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: 1790415148045805366} - 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!224 &1790415148045805307 RectTransform: m_ObjectHideFlags: 0 @@ -22043,18 +21170,18 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804919} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 1790415148045805399} - m_Father: {fileID: 1790415148045805364} + m_Father: {fileID: 1930289645} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 20, y: -30} - m_SizeDelta: {x: 35, y: 54} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 69.86} + m_SizeDelta: {x: 179, y: 140} m_Pivot: {x: 0, y: 1} --- !u!224 &1790415148045805313 RectTransform: @@ -22133,25 +21260,6 @@ RectTransform: m_AnchoredPosition: {x: -10, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805317 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804924} - 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: 1790415148045805338} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.00019171817} - m_SizeDelta: {x: 0, y: 1499.48} - m_Pivot: {x: 0, y: 1} --- !u!224 &1790415148045805318 RectTransform: m_ObjectHideFlags: 0 @@ -22214,25 +21322,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -60, y: 59} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805321 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804928} - 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: 559534781} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -50} - m_SizeDelta: {x: 720, y: 100} - m_Pivot: {x: 0.5, y: 1} --- !u!224 &1790415148045805322 RectTransform: m_ObjectHideFlags: 0 @@ -22332,25 +21421,6 @@ RectTransform: m_AnchoredPosition: {x: 245, y: -6} m_SizeDelta: {x: 320, y: 100} m_Pivot: {x: 0, y: 0.5} ---- !u!224 &1790415148045805327 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804934} - 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: 1790415148045805362} - 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!224 &1790415148045805328 RectTransform: m_ObjectHideFlags: 0 @@ -22429,26 +21499,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805332 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804939} - 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: 1790415148045805425} - m_Father: {fileID: 1790415148045805373} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.9, y: 0.5} - m_AnchorMax: {x: 0.9, y: 0.5} - m_AnchoredPosition: {x: 51, y: 0} - m_SizeDelta: {x: 113.625, y: 103.5} - m_Pivot: {x: 1, y: 0.5} --- !u!224 &1790415148045805333 RectTransform: m_ObjectHideFlags: 0 @@ -22548,26 +21598,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -60, y: 59} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805338 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804945} - 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: 1790415148045805317} - m_Father: {fileID: 1790415148045805453} - 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: -17, y: 0} - m_Pivot: {x: 0, y: 1} --- !u!224 &1790415148045805339 RectTransform: m_ObjectHideFlags: 0 @@ -22730,84 +21760,25 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 5} m_SizeDelta: {x: 0, y: -250} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805348 +--- !u!224 &1790415148045805350 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804955} + m_GameObject: {fileID: 1790415148045804957} 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: 386392575} - m_Father: {fileID: 1790415148045805376} - 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!224 &1790415148045805349 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804956} - 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: 1790415148045805405} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.000009102428} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!224 &1790415148045805350 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804957} - 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: 1790415148045805299} + m_Children: [] + m_Father: {fileID: 1790415148045805299} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0.65, y: 1} m_AnchoredPosition: {x: 10, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805351 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804958} - 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: 1790415148045805360} - m_Father: {fileID: 1790415148045805426} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.9, y: 0.5} - m_AnchorMax: {x: 0.9, y: 0.5} - m_AnchoredPosition: {x: 51, y: 0} - m_SizeDelta: {x: 113.625, y: 103.5} - m_Pivot: {x: 1, y: 0.5} --- !u!224 &1790415148045805352 RectTransform: m_ObjectHideFlags: 0 @@ -22832,25 +21803,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 320} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805354 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804960} - 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: 663915883} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: -962.89984, y: 0} - m_SizeDelta: {x: 209.2, y: 70} - m_Pivot: {x: 0, y: 0.5} --- !u!224 &1790415148045805355 RectTransform: m_ObjectHideFlags: 0 @@ -22908,45 +21860,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805358 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804965} - 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: 1338199915} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: -962.89984, y: 0} - m_SizeDelta: {x: 209.2, y: 70} - m_Pivot: {x: 0, y: 0.5} ---- !u!224 &1790415148045805360 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804968} - 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: 1525162773} - m_Father: {fileID: 1790415148045805351} - 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!224 &1790415148045805361 RectTransform: m_ObjectHideFlags: 0 @@ -22966,26 +21879,6 @@ RectTransform: m_AnchoredPosition: {x: 24.800049, y: -0.5999771} m_SizeDelta: {x: 93, y: 98} m_Pivot: {x: 0, y: 0.5} ---- !u!224 &1790415148045805362 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804971} - 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: 1790415148045805327} - m_Father: {fileID: 1790415148045805373} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.8, y: 0.5} - m_AnchorMax: {x: 0.8, y: 0.5} - m_AnchoredPosition: {x: -110, y: 0} - m_SizeDelta: {x: 200, y: 59} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805363 RectTransform: m_ObjectHideFlags: 0 @@ -23017,54 +21910,16 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 559534781} - - {fileID: 1790415148045805312} + - {fileID: 1930289645} + - {fileID: 340663871} - {fileID: 1790415148045805451} + - {fileID: 996169757} m_Father: {fileID: 1790415148045805308} 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!224 &1790415148045805366 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804975} - 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: 1790415148045805306} - m_Father: {fileID: 1790415148045805426} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.8, y: 0.5} - m_AnchorMax: {x: 0.8, y: 0.5} - m_AnchoredPosition: {x: -110, y: 0} - m_SizeDelta: {x: 200, y: 59} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805367 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804976} - 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: 1790415148045805292} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + 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: 0, y: 0} + m_SizeDelta: {x: 1080, y: 1920} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805368 RectTransform: @@ -23112,18 +21967,18 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045804979} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 1790415148045805451} + m_Father: {fileID: 340663871} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 30, y: -50} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 680, y: 0.00012207031} m_SizeDelta: {x: 280, y: 70} - m_Pivot: {x: 0, y: 1} + m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805371 RectTransform: m_ObjectHideFlags: 0 @@ -23162,27 +22017,6 @@ RectTransform: m_AnchoredPosition: {x: 212, y: 32.49999} m_SizeDelta: {x: 400, y: 65} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805373 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805054} - 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: 1790415148045805332} - - {fileID: 1790415148045805362} - m_Father: {fileID: 663915883} - 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: 144.23999, y: 0} - m_SizeDelta: {x: 697, y: 195} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805374 RectTransform: m_ObjectHideFlags: 0 @@ -23232,26 +22066,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: -80} m_SizeDelta: {x: -60, y: 59} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805376 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804984} - 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: 1790415148045805348} - m_Father: {fileID: 1790415148045805435} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.9, y: 0.5} - m_AnchorMax: {x: 0.9, y: 0.5} - m_AnchoredPosition: {x: 51, y: 0} - m_SizeDelta: {x: 113.625, y: 103.5} - m_Pivot: {x: 1, y: 0.5} --- !u!224 &1790415148045805377 RectTransform: m_ObjectHideFlags: 0 @@ -23654,25 +22468,6 @@ RectTransform: m_AnchoredPosition: {x: -508, y: 0} m_SizeDelta: {x: 500, y: 70} m_Pivot: {x: 0, y: 1} ---- !u!224 &1790415148045805397 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805005} - 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: 794660265} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: -962.89984, y: 0} - m_SizeDelta: {x: 209.2, y: 70} - m_Pivot: {x: 0, y: 0.5} --- !u!224 &1790415148045805398 RectTransform: m_ObjectHideFlags: 0 @@ -23749,26 +22544,6 @@ RectTransform: m_AnchoredPosition: {x: -508, y: 0} m_SizeDelta: {x: 500, y: 70} m_Pivot: {x: 0, y: 1} ---- !u!224 &1790415148045805403 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805013} - 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: 272220714} - m_Father: {fileID: 1790415148045805456} - 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!224 &1790415148045805404 RectTransform: m_ObjectHideFlags: 0 @@ -23788,26 +22563,6 @@ RectTransform: m_AnchoredPosition: {x: 75.64, y: -4.5075073} m_SizeDelta: {x: -151.28, y: -9.01} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805405 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805015} - 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: 1790415148045805349} - m_Father: {fileID: 1790415148045805418} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.040000003} - m_AnchorMax: {x: 1, y: 0.97413146} - m_AnchoredPosition: {x: 0, y: -0.48046875} - m_SizeDelta: {x: 0, y: -0.18999863} - m_Pivot: {x: 0, y: 1} --- !u!224 &1790415148045805406 RectTransform: m_ObjectHideFlags: 0 @@ -24050,26 +22805,6 @@ RectTransform: m_AnchoredPosition: {x: 263.5, y: -0.0000076294} m_SizeDelta: {x: 320, y: 100} m_Pivot: {x: 0, y: 0.5} ---- !u!224 &1790415148045805418 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805028} - 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: 1790415148045805405} - m_Father: {fileID: 1790415148045805451} - 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: -76} - m_SizeDelta: {x: 0, y: -168} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805419 RectTransform: m_ObjectHideFlags: 0 @@ -24189,102 +22924,61 @@ RectTransform: m_AnchoredPosition: {x: -17.099998, y: 0} m_SizeDelta: {x: 91, y: 78} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805425 +--- !u!224 &1790415148045805427 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805035} + m_GameObject: {fileID: 1790415148045805036} 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: 893368064} - m_Father: {fileID: 1790415148045805332} + m_Children: [] + m_Father: {fileID: 1790415148045805432} 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!224 &1790415148045805426 +--- !u!224 &1790415148045805428 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804909} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_GameObject: {fileID: 1790415148045805037} + 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: 1790415148045805351} - - {fileID: 1790415148045805366} - m_Father: {fileID: 1338199915} + - {fileID: 1790415148045805310} + - {fileID: 1790415148045805316} + m_Father: {fileID: 1790415148045805387} 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: 144.23999, y: 0} - m_SizeDelta: {x: 697, y: 195} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: -80} + m_SizeDelta: {x: -60, y: 59} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805427 +--- !u!224 &1790415148045805429 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805036} + m_GameObject: {fileID: 1790415148045805038} 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: 1790415148045805432} + m_Father: {fileID: 1790415148045805320} 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!224 &1790415148045805428 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805037} - 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: 1790415148045805310} - - {fileID: 1790415148045805316} - m_Father: {fileID: 1790415148045805387} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: -80} - m_SizeDelta: {x: -60, y: 59} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805429 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805038} - 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: 1790415148045805320} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.65, y: 0} + m_AnchorMin: {x: 0.65, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: -10, y: 0} m_SizeDelta: {x: -20, y: 0} @@ -24347,27 +23041,6 @@ RectTransform: m_AnchoredPosition: {x: -14.729996, y: -0.22999954} m_SizeDelta: {x: 211.2, y: 72.42} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &1790415148045805435 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805078} - 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: 1790415148045805376} - - {fileID: 1790415148045805292} - m_Father: {fileID: 794660265} - 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: 144.23999, y: 0} - m_SizeDelta: {x: 697, y: 195} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805436 RectTransform: m_ObjectHideFlags: 0 @@ -24679,17 +23352,15 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1790415148045805370} - - {fileID: 1790415148045805294} - {fileID: 1790415148045805319} - {fileID: 1790415148045805297} - - {fileID: 1790415148045805418} + - {fileID: 792853319} m_Father: {fileID: 1790415148045805364} 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: -107} - m_SizeDelta: {x: -40, y: -260} + m_AnchoredPosition: {x: 0, y: -194.25} + m_SizeDelta: {x: -40, y: -434.5} m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805452 RectTransform: @@ -24710,27 +23381,6 @@ RectTransform: m_AnchoredPosition: {x: -21, y: 0} m_SizeDelta: {x: 262, y: 88} m_Pivot: {x: 1, y: 0.5} ---- !u!224 &1790415148045805453 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805062} - 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: 1790415148045805338} - - {fileID: 760563381} - m_Father: {fileID: 1790415148045805302} - 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: -136} - m_SizeDelta: {x: 0, y: -532} - m_Pivot: {x: 0.5, y: 0.5} --- !u!224 &1790415148045805454 RectTransform: m_ObjectHideFlags: 0 @@ -24772,26 +23422,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 60} m_SizeDelta: {x: 397, y: 109} m_Pivot: {x: 0.5, y: 0} ---- !u!224 &1790415148045805456 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805066} - 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: 1790415148045805403} - m_Father: {fileID: 1790415148045805290} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.9, y: 0.5} - m_AnchorMax: {x: 0.9, y: 0.5} - m_AnchoredPosition: {x: 51, y: 0} - m_SizeDelta: {x: 113.625, y: 103.5} - m_Pivot: {x: 1, y: 0.5} --- !u!224 &1790415148045805457 RectTransform: m_ObjectHideFlags: 0 @@ -25069,25 +23699,6 @@ RectTransform: m_AnchoredPosition: {x: 20, y: -30} m_SizeDelta: {x: 35, y: 54} m_Pivot: {x: 0, y: 1} ---- !u!224 &1790415148045805472 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805082} - 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: 1790415148045805303} - 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!225 &1790415148045805474 CanvasGroup: m_ObjectHideFlags: 0 @@ -25469,22 +24080,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805490 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a8957705847701a2ba7be99c0ef76a0d, type: 3} - m_Name: - m_EditorClassIdentifier: - levelGroup: {fileID: 11400000, guid: cf6a4a494d684237bcf9ce01e1ac77ae, type: 2} - TitleLbl: {fileID: 0} - LevelCompletdLbl: {fileID: 0} - AwardGoldImage: {fileID: 1790415148045805013} --- !u!114 &1790415148045805491 MonoBehaviour: m_ObjectHideFlags: 0 @@ -25575,36 +24170,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805493 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804898} - 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: 21300000, guid: 5a5d5fbf2b0304fef8da8a584f9d46c6, type: 3} - m_Type: 1 - m_PreserveAspect: 1 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &1790415148045805494 MonoBehaviour: m_ObjectHideFlags: 0 @@ -25910,40 +24475,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: 0 / 50 ---- !u!114 &1790415148045805504 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804907} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 3 - m_MaxSize: 60 - m_Alignment: 3 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: EXPERT --- !u!114 &1790415148045805505 MonoBehaviour: m_ObjectHideFlags: 0 @@ -25997,77 +24528,82 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805507 +--- !u!114 &1790415148045805511 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804909} + m_GameObject: {fileID: 1790415148045804911} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: - m_IgnoreLayout: 0 - m_MinWidth: -1 - m_MinHeight: -1 - m_PreferredWidth: 697 - m_PreferredHeight: -1 - m_FlexibleWidth: -1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!114 &1790415148045805508 + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + 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!114 &1790415148045805512 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804909} + m_GameObject: {fileID: 1790415148045804912} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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.7843137, g: 0.7843137, b: 0.7843137, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.7843137, g: 0.7843137, b: 0.7843137, 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: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1790415148045805509} - m_OnClick: + 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: [] ---- !u!114 &1790415148045805509 + m_FontData: + m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} + m_FontSize: 34 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 1 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Every puzzle soloved will grant you + + some xp, and you can collect + xp to + + reach the next Rank.' +--- !u!114 &1790415148045805514 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804909} + m_GameObject: {fileID: 1790415148045804914} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -26081,8 +24617,8 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 86ad28a37b0134b33b88df67b42b7fe0, type: 3} - m_Type: 1 + m_Sprite: {fileID: 21300000, guid: 1faa01d7da0a9e04aaa71b11b13de1a0, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -26091,176 +24627,13 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805510 +--- !u!114 &1790415148045805515 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804910} - 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: 21300000, guid: 5a5d5fbf2b0304fef8da8a584f9d46c6, type: 3} - m_Type: 1 - m_PreserveAspect: 1 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805511 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804911} - 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: 0} - 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!114 &1790415148045805512 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804912} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 34 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 4 - m_MaxSize: 64 - m_Alignment: 4 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'Every puzzle soloved will grant you - - some xp, and you can collect - xp to - - reach the next Rank.' ---- !u!114 &1790415148045805513 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804913} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 48 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 1 - m_MaxSize: 78 - m_Alignment: 4 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0 / 50 ---- !u!114 &1790415148045805514 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804914} - 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: 21300000, guid: 1faa01d7da0a9e04aaa71b11b13de1a0, type: 3} - 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!114 &1790415148045805515 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804915} + m_GameObject: {fileID: 1790415148045804915} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} @@ -26309,7 +24682,8 @@ MonoBehaviour: starRanklbl: {fileID: 363640466} coinLbl: {fileID: 1790415148045805690} starRankBar: {fileID: 1790415148045805598} - groupList: {fileID: 1790415148045804924} + currentLevelImage: {fileID: 21300000, guid: d6050c224724bfa449d8aec816e61b7a, type: 3} + groupList: {fileID: 0} soundToggle: {fileID: 1790415148045805658} musicToggle: {fileID: 1790415148045805491} LevelDetailPopup: {fileID: 1790415148045805588} @@ -26317,8 +24691,8 @@ MonoBehaviour: LD_LevelCompletdLbl: {fileID: 1790415148045805545} LD_AwardGoldImage: {fileID: 1790415148045805050} LD_BGImage: {fileID: 1790415148045805701} - LD_scrollRect: {fileID: 1790415148045805655} - LD_parentContent: {fileID: 1790415148045805349} + LD_scrollRect: {fileID: 792853320} + LD_parentContent: {fileID: 635984275} LD_prefabBtn: {fileID: 1790415148045805128, guid: b1eda44b6e529d64b9b4af515dae8482, type: 3} canvasGroups: @@ -26559,7 +24933,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: b78e1c94f1bcb42a7996ce616745e100, type: 3} + m_Sprite: {fileID: 21300000, guid: dee9445eca1072d479f52ea7f8867812, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -26765,46 +25139,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: '00 : 29' ---- !u!114 &1790415148045805529 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804924} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!114 &1790415148045805530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804924} - 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: 20 - m_Bottom: 20 - m_ChildAlignment: 4 - m_Spacing: 121.12 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 --- !u!114 &1790415148045805531 MonoBehaviour: m_ObjectHideFlags: 0 @@ -26951,40 +25285,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804928} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 64 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 10 - m_MaxSize: 64 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: LEVELS --- !u!114 &1790415148045805536 MonoBehaviour: m_ObjectHideFlags: 0 @@ -27109,40 +25409,6 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 ---- !u!114 &1790415148045805541 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804934} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 48 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 1 - m_MaxSize: 78 - m_Alignment: 4 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0 / 50 --- !u!114 &1790415148045805542 MonoBehaviour: m_ObjectHideFlags: 0 @@ -27258,7 +25524,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} + m_Font: {fileID: 12800000, guid: b62ffe21fe511f84d9865b325ebeb7c4, type: 3} m_FontSize: 18 m_FontStyle: 0 m_BestFit: 1 @@ -27271,43 +25537,13 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: '- 0 / 50 -' ---- !u!114 &1790415148045805546 +--- !u!114 &1790415148045805547 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804939} - 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: 21300000, guid: 563ca0f21bfce408b86459e92e3deaa1, type: 3} - 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!114 &1790415148045805547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804940} + m_GameObject: {fileID: 1790415148045804940} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -27421,50 +25657,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804945} - 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: 0} - 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: 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 &1790415148045805553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: {x: 0, y: 0, z: 0, w: 0} - m_Softness: {x: 0, y: 0} --- !u!114 &1790415148045805554 MonoBehaviour: m_ObjectHideFlags: 0 @@ -27871,74 +26063,6 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] ---- !u!114 &1790415148045805566 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804955} - 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: 0.8745098, b: 0, 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: 21300000, guid: aef20f8e21ef14da9ba50e7d8df50510, type: 3} - 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!114 &1790415148045805567 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804956} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 0 - m_VerticalFit: 2 ---- !u!114 &1790415148045805568 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804956} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 2 - m_Right: 2 - m_Top: 2 - m_Bottom: 2 - m_ChildAlignment: 1 - m_StartCorner: 0 - m_StartAxis: 0 - m_CellSize: {x: 130, y: 130} - m_Spacing: {x: 20, y: 20} - m_Constraint: 0 - m_ConstraintCount: 4 --- !u!114 &1790415148045805569 MonoBehaviour: m_ObjectHideFlags: 0 @@ -27973,70 +26097,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: Level Completd ---- !u!114 &1790415148045805570 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804958} - 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: 21300000, guid: 8c35201ab90e548489bbcec22209ceaf, type: 3} - 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!114 &1790415148045805572 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804960} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 3 - m_MaxSize: 60 - m_Alignment: 3 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ADVANCE --- !u!114 &1790415148045805573 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28174,134 +26234,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804965} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 3 - m_MaxSize: 60 - m_Alignment: 3 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: MEDIUM ---- !u!114 &1790415148045805579 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804966} - 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: 697 - m_PreferredHeight: -1 - m_FlexibleWidth: -1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!114 &1790415148045805580 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804966} - 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.7843137, g: 0.7843137, b: 0.7843137, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.7843137, g: 0.7843137, b: 0.7843137, 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: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1790415148045805581} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1790415148045805581 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804966} - 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: 21300000, guid: f87d9d25262734d879c2da72faf95bf2, type: 3} - 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 &1790415148045805582 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28317,36 +26249,6 @@ MonoBehaviour: gameMaster: {fileID: 1790415148045805060, guid: bfbb5352b36db73418bff6eeac290ae6, type: 3} sceneName: Home ---- !u!114 &1790415148045805583 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804968} - 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: 0.8745098, b: 0, 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: 21300000, guid: 8c35201ab90e548489bbcec22209ceaf, type: 3} - 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!114 &1790415148045805584 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28397,36 +26299,6 @@ MonoBehaviour: m_InputActionsPerSecond: 10 m_RepeatDelay: 0.5 m_ForceModuleActive: 0 ---- !u!114 &1790415148045805586 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804971} - 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: 21300000, guid: 5a5d5fbf2b0304fef8da8a584f9d46c6, type: 3} - m_Type: 1 - m_PreserveAspect: 1 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &1790415148045805587 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28497,66 +26369,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.1490196, g: 0.1960784, b: 0.2196079, 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!114 &1790415148045805591 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804975} - 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: 21300000, guid: 5a5d5fbf2b0304fef8da8a584f9d46c6, type: 3} - m_Type: 1 - m_PreserveAspect: 1 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805592 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804976} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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} @@ -28564,20 +26376,16 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 48 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 1 - m_MaxSize: 78 - m_Alignment: 4 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0 / 50 + m_Sprite: {fileID: 21300000, guid: f044f404151f90147a7fcc98de5bc480, type: 3} + 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!114 &1790415148045805593 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28731,13 +26539,13 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} + m_Font: {fileID: 12800000, guid: b62ffe21fe511f84d9865b325ebeb7c4, type: 3} m_FontSize: 30 m_FontStyle: 0 m_BestFit: 1 m_MinSize: 3 m_MaxSize: 70 - m_Alignment: 3 + m_Alignment: 5 m_AlignByGeometry: 1 m_RichText: 1 m_HorizontalOverflow: 0 @@ -28808,22 +26616,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805599 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805054} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a8957705847701a2ba7be99c0ef76a0d, type: 3} - m_Name: - m_EditorClassIdentifier: - levelGroup: {fileID: 11400000, guid: d606e6845dd447e2bf40638facbc7c7e, type: 2} - TitleLbl: {fileID: 0} - LevelCompletdLbl: {fileID: 0} - AwardGoldImage: {fileID: 1790415148045805035} --- !u!114 &1790415148045805600 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28884,36 +26676,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805602 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804984} - 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: 21300000, guid: aef20f8e21ef14da9ba50e7d8df50510, type: 3} - 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!114 &1790415148045805603 MonoBehaviour: m_ObjectHideFlags: 0 @@ -29713,40 +27475,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: EXPERT ---- !u!114 &1790415148045805627 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805005} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 30 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 3 - m_MaxSize: 60 - m_Alignment: 3 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: HARD --- !u!114 &1790415148045805628 MonoBehaviour: m_ObjectHideFlags: 0 @@ -29926,80 +27654,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: EASY ---- !u!114 &1790415148045805639 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805013} - 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: 0.8745098, b: 0, 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: 21300000, guid: 0358e94906c704657ab9ca0a8ce5a588, type: 3} - 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!114 &1790415148045805641 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805015} - 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: 0} - 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: 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 &1790415148045805642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805015} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: {x: 0, y: 0, z: 0, w: 0} - m_Softness: {x: 0, y: 0} --- !u!114 &1790415148045805643 MonoBehaviour: m_ObjectHideFlags: 0 @@ -30328,36 +27982,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805655 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805028} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 1790415148045805349} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 1 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 1790415148045805405} - m_HorizontalScrollbar: {fileID: 0} - m_VerticalScrollbar: {fileID: 0} - m_HorizontalScrollbarVisibility: 2 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] --- !u!114 &1790415148045805656 MonoBehaviour: m_ObjectHideFlags: 0 @@ -30688,52 +28312,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805035} - 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: 0.8745098, b: 0, 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: 21300000, guid: 563ca0f21bfce408b86459e92e3deaa1, type: 3} - 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!114 &1790415148045805665 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045804909} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a8957705847701a2ba7be99c0ef76a0d, type: 3} - m_Name: - m_EditorClassIdentifier: - levelGroup: {fileID: 11400000, guid: d61999cc37d04360a3f0bf32267bf82a, type: 2} - TitleLbl: {fileID: 0} - LevelCompletdLbl: {fileID: 0} - AwardGoldImage: {fileID: 1790415148045804968} --- !u!114 &1790415148045805666 MonoBehaviour: m_ObjectHideFlags: 0 @@ -30892,22 +28470,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: Average Time ---- !u!114 &1790415148045805673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805078} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a8957705847701a2ba7be99c0ef76a0d, type: 3} - m_Name: - m_EditorClassIdentifier: - levelGroup: {fileID: 11400000, guid: e5f4032f73074b45aa468e2ecf71f81c, type: 2} - TitleLbl: {fileID: 0} - LevelCompletdLbl: {fileID: 0} - AwardGoldImage: {fileID: 1790415148045804955} --- !u!114 &1790415148045805674 MonoBehaviour: m_ObjectHideFlags: 0 @@ -31195,45 +28757,15 @@ MonoBehaviour: 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: 21300000, guid: 97af439d5b4004d96b2dadfe95b1b414, type: 3} - 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 &1790415148045805683 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805050} - 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: 0.8745098, b: 0, a: 1} + 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: 21300000, guid: cb873b07dc75243c1942d89018500c32, type: 3} - m_Type: 0 + m_Sprite: {fileID: 21300000, guid: 97af439d5b4004d96b2dadfe95b1b414, type: 3} + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -31242,28 +28774,28 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805684 +--- !u!114 &1790415148045805683 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805051} + m_GameObject: {fileID: 1790415148045805050} 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_Color: {r: 1, g: 0.8745098, b: 0, 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: 21300000, guid: 804461bef59b141dba258fc997c8ca15, type: 3} - m_Type: 1 + m_Sprite: {fileID: 21300000, guid: cb873b07dc75243c1942d89018500c32, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -31272,13 +28804,13 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805685 +--- !u!114 &1790415148045805684 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805052} + m_GameObject: {fileID: 1790415148045805051} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -31292,7 +28824,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 362cdbc283a1c43a7abec33080b04398, type: 3} + m_Sprite: {fileID: 21300000, guid: 804461bef59b141dba258fc997c8ca15, type: 3} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -31302,77 +28834,13 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805687 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805054} - 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: 697 - m_PreferredHeight: -1 - m_FlexibleWidth: -1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!114 &1790415148045805688 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805054} - 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.7843137, g: 0.7843137, b: 0.7843137, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.7843137, g: 0.7843137, b: 0.7843137, 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: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1790415148045805689} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1790415148045805689 +--- !u!114 &1790415148045805685 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805054} + m_GameObject: {fileID: 1790415148045805052} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} @@ -31780,7 +29248,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1790415148045805060} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: @@ -31833,36 +29301,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805703 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805062} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 1790415148045805317} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 1 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 1790415148045805338} - m_HorizontalScrollbar: {fileID: 0} - m_VerticalScrollbar: {fileID: 760563382} - m_HorizontalScrollbarVisibility: 2 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: -3 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] --- !u!114 &1790415148045805704 MonoBehaviour: m_ObjectHideFlags: 0 @@ -32082,36 +29520,6 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] ---- !u!114 &1790415148045805710 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805066} - 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: 21300000, guid: 0358e94906c704657ab9ca0a8ce5a588, type: 3} - 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!114 &1790415148045805711 MonoBehaviour: m_ObjectHideFlags: 0 @@ -32417,100 +29825,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805722 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805078} - 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: 697 - m_PreferredHeight: -1 - m_FlexibleWidth: -1 - m_FlexibleHeight: -1 - m_LayoutPriority: 1 ---- !u!114 &1790415148045805723 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805078} - 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.7843137, g: 0.7843137, b: 0.7843137, a: 1} - m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.7843137, g: 0.7843137, b: 0.7843137, 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: Highlighted - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 1790415148045805724} - m_OnClick: - m_PersistentCalls: - m_Calls: [] ---- !u!114 &1790415148045805724 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805078} - 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: 21300000, guid: 23d2f9d15f15a43c5bf2c57de1a27879, type: 3} - 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 &1790415148045805725 MonoBehaviour: m_ObjectHideFlags: 0 @@ -32687,40 +30001,6 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!114 &1790415148045805729 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1790415148045805082} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: - m_Font: {fileID: 12800000, guid: c16eb7d7c3953489db00312b8b09df4b, type: 3} - m_FontSize: 48 - m_FontStyle: 0 - m_BestFit: 1 - m_MinSize: 1 - m_MaxSize: 78 - m_Alignment: 4 - m_AlignByGeometry: 1 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 0 / 50 --- !u!1001 &5639290088343042499 PrefabInstance: m_ObjectHideFlags: 0 @@ -32729,6 +30009,11 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 1449924014} m_Modifications: + - target: {fileID: 1218484714929747837, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1874732832837415157, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_Name @@ -32834,11 +30119,36 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 7107088943786912931, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_Color.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7107088943786912931, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7107088943786912931, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 50162020} + - target: {fileID: 7293706673478605280, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7924325999141675328, guid: 3fe1e610ab27a064392b55794734a610, type: 3} propertyPath: m_Name value: Easy objectReference: {fileID: 0} + - target: {fileID: 8547466323607184844, guid: 3fe1e610ab27a064392b55794734a610, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -120.79001 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] diff --git a/Assets/Prefab/DetailLevelButton.prefab b/Assets/Prefab/DetailLevelButton.prefab index 2e97b192..08b41d98 100644 --- a/Assets/Prefab/DetailLevelButton.prefab +++ b/Assets/Prefab/DetailLevelButton.prefab @@ -12,6 +12,7 @@ GameObject: - component: {fileID: 1790415148045805090} - component: {fileID: 1790415148045805126} - component: {fileID: 1790415148045805128} + - component: {fileID: 7366537419144251952} m_Layer: 5 m_Name: DetailLevelButton m_TagString: @@ -32,12 +33,13 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1790415148045805100} + - {fileID: 8788744581298015824} 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: 0, y: 0} + m_SizeDelta: {x: 250, y: 250} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &1790415148045805090 CanvasRenderer: @@ -67,8 +69,8 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: d2b5b74e034bb4321ba792a6e4f81e27, type: 3} - m_Type: 1 + m_Sprite: {fileID: 21300000, guid: 169ba05639ae5554c98c89c6b79786ed, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -121,6 +123,24 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!114 &7366537419144251952 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790415148045805070} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b588e800cbc03d84687131f7dc1e9517, type: 3} + m_Name: + m_EditorClassIdentifier: + ForceMaterial: {fileID: 0} + ActiveChange: 1 + _Alpha: 1 + _EffectAmount: 1 + ShaderChange: 0 + ActiveUpdate: 1 --- !u!1 &1790415148045805072 GameObject: m_ObjectHideFlags: 0 @@ -155,7 +175,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.0000004768372, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -30, y: -30} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &1790415148045805089 @@ -179,7 +199,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.1803922, g: 0.4901961, b: 0.1960784, a: 1} + m_Color: {r: 0, g: 0.7720158, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -187,7 +207,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_FontData: - m_Font: {fileID: 12800000, guid: fb2009004df54402bb50848749399b0a, type: 3} + m_Font: {fileID: 12800000, guid: b62ffe21fe511f84d9865b325ebeb7c4, type: 3} m_FontSize: 66 m_FontStyle: 0 m_BestFit: 1 @@ -200,3 +220,157 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: 1 +--- !u!1001 &2591333017665727809 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1790415148045805099} + m_Modifications: + - target: {fileID: 6485648589738255120, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_Name + value: Fx_Star_White_Large_Blended + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255120, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_SizeDelta.y + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalScale.x + value: 31.8805 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalScale.y + value: 31.8805 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalScale.z + value: 31.8805 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255132, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6485648589738255133, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + propertyPath: playOnAwake + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 440a0cd4023ea44bda3d544cc44fe47f, type: 3} +--- !u!224 &8788744581298015824 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6485648589738255121, guid: 440a0cd4023ea44bda3d544cc44fe47f, + type: 3} + m_PrefabInstance: {fileID: 2591333017665727809} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Prefab/LevelTypeCell.prefab b/Assets/Prefab/LevelTypeCell.prefab index 329050a2..68b08301 100644 --- a/Assets/Prefab/LevelTypeCell.prefab +++ b/Assets/Prefab/LevelTypeCell.prefab @@ -11,13 +11,14 @@ GameObject: - component: {fileID: 2115848947174123461} - component: {fileID: 7595020304624281204} - component: {fileID: 7107088943786912931} + - component: {fileID: 7293706673478605280} m_Layer: 5 m_Name: AvatarGold m_TagString: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &2115848947174123461 RectTransform: m_ObjectHideFlags: 0 @@ -76,6 +77,24 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7293706673478605280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218484714929747837} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b588e800cbc03d84687131f7dc1e9517, type: 3} + m_Name: + m_EditorClassIdentifier: + ForceMaterial: {fileID: 0} + ActiveChange: 1 + _Alpha: 1 + _EffectAmount: 1 + ShaderChange: 0 + ActiveUpdate: 1 --- !u!1 &1619904378018664665 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/HomeScene.cs b/Assets/Scripts/HomeScene.cs index b7fce595..3ad6c456 100644 --- a/Assets/Scripts/HomeScene.cs +++ b/Assets/Scripts/HomeScene.cs @@ -27,6 +27,7 @@ public class HomeScene : MonoBehaviour public Text coinLbl; public Image starRankBar; + public Sprite currentLevelImage; public GameObject groupList; @@ -114,10 +115,10 @@ public class HomeScene : MonoBehaviour int completedLevel = lb.levelGroup.CompletedLevel; LD_TitleLbl.text = lb.levelGroup.LevelGroupName.ToUpper(); LD_LevelCompletdLbl.text = completedLevel + " / " + lb.levelGroup.TotalLevel; - LD_AwardGoldImage.SetActive(completedLevel >= lb.levelGroup.TotalLevel); + // LD_AwardGoldImage.SetActive(completedLevel >= lb.levelGroup.TotalLevel); LD_BGImage.sprite = lb.levelGroup.LevelDetailBG; - LD_AwardGoldImage.GetComponentInParent().sprite = lb.AwardGoldImage.GetComponentInParent().sprite; - LD_LevelCompletdLbl.GetComponentInParent().sprite = lb.LevelCompletdLbl.GetComponentInParent().sprite; + // LD_AwardGoldImage.GetComponentInParent().sprite = lb.AwardGoldImage.GetComponentInParent().sprite; + // LD_LevelCompletdLbl.GetComponentInParent().sprite = lb.LevelCompletdLbl.GetComponentInParent().sprite; for (int num = LD_parentContent.childCount - 1; num >= 0; num--) { UnityEngine.Object.DestroyImmediate(LD_parentContent.GetChild(0).gameObject); @@ -129,7 +130,13 @@ public class HomeScene : MonoBehaviour button.GetComponentInChildren().text = i + 1 + string.Empty; if (i <= completedLevel) { + if (i == completedLevel) + { + button.GetComponent().sprite = currentLevelImage; + button.GetComponentInChildren(true).gameObject.SetActive(true); + } button.interactable = true; + button.GetComponent<_2dxFX_GrayScale>().enabled = false; button.GetComponent().color = Color.white; button.GetComponentInChildren().color = lb.levelGroup.bgColor; int lNo = i + 1; @@ -144,6 +151,7 @@ public class HomeScene : MonoBehaviour else { button.interactable = false; + button.GetComponent<_2dxFX_GrayScale>().enabled = true; button.GetComponent().color = lb.levelGroup.bgColor; button.GetComponentInChildren().color = Color.white; } diff --git a/Assets/Scripts/LevelGroupButton.cs b/Assets/Scripts/LevelGroupButton.cs index b1276712..1455b46d 100644 --- a/Assets/Scripts/LevelGroupButton.cs +++ b/Assets/Scripts/LevelGroupButton.cs @@ -49,6 +49,6 @@ public class LevelGroupButton : MonoBehaviour base.name = levelGroup.LevelGroupName; TitleLbl.text = base.name.ToUpper(); LevelCompletdLbl.text = levelGroup.CompletedLevel + " / " + levelGroup.TotalLevel; - AwardGoldImage.SetActive(levelGroup.CompletedLevel >= levelGroup.TotalLevel); + AwardGoldImage.GetComponent<_2dxFX_GrayScale>().enabled = !(levelGroup.CompletedLevel >= levelGroup.TotalLevel); } }